70.1 删除临时表
临时表必须拥有唯一标识(本地临时表在当前会话内唯一,全局临时表在整个实例内唯一)。若再次创建同名临时表,会报错:
已有名为 '#tempTable' 的对象存在于数据库中。
如果脚本会多次运行并创建同名临时表,应在创建前先删除:
sql
DROP TABLE #tempTable
首次运行前该表并不存在,直接执行 DROP 会报错:
无法删除表 '#tempTable',因为该表不存在或您没有权限。
因此通常先判断是否存在再删除:
sql
IF OBJECT_ID('tempdb..#tempTable','U') IS NOT NULL
DROP TABLE #tempTable
70.2 本地临时表
- 仅在当前连接会话期间存在
- 会话断开时自动删除
- 表名以单个 # 开头(例如 #temp)
sql
CREATE TABLE #LocalTempTable(
StudentID int,
StudentName varchar(50),
StudentAddress varchar(150)
)
INSERT INTO #LocalTempTable VALUES (1, '小明', '北京')
SELECT * FROM #LocalTempTable
关闭并重新打开查询窗口后再操作,会报错:
对象名 '#LocalTempTable' 无效。
70.3 全局临时表
- 表名以 ## 开头
- 仅当所有引用该表的用户都断开连接时才被删除
- 行为类似永久表,但生命周期随会话结束而结束
- 任何数据库用户都可见,不受常规权限限制
sql
CREATE TABLE ##NewGlobalTempTable(
StudentID int,
StudentName varchar(50),
StudentAddress varchar(150)
)
INSERT INTO ##NewGlobalTempTable VALUES (1, 'Ram', 'India')
SELECT * FROM ##NewGlobalTempTable