SQL删除临时表

Mar*_*n H 2 sql database sql-server

在存储过程中删除表是一种更好的做法?

样品A.

IF OBJECT_ID('tempdb..#tTable1') IS NOT NULL
  DROP TABLE #tTable1
CREATE TABLE #tTable1
Run Code Online (Sandbox Code Playgroud)

样品B.

CREATE TABLE #tTable1
select * from #tTable1
Drop TABLE #tTable1
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您正在处理本地临时表.你不需要这么担心.

存储过程在返回时自动删除临时表,因此您不必担心临时表会延迟.我花了一段时间来习惯这种行为,但因为这种行为被记录在案,你可以依靠它:

  • 存储过程完成时,将自动删除在存储过程中创建的本地临时表.

这是本地声明的临时表在SQL Server中的工作方式.这只是他们定义的语义.

当然,您可能会担心在存储过程创建的临时表.但大肆丢弃这样的表可能是危险的.

在多次调用存储过程时,您不必担心命名冲突:

如果在可由多个用户同时执行的存储过程或应用程序中创建本地临时表,则数据库引擎必须能够区分由不同用户创建的表.数据库引擎通过在每个本地临时表名称内部附加数字后缀来完成此操作.

这一切都有一些细微差别.因为临时表使用公共名称空间来表示约束名称,所以如果添加自己的名称,则需要小心.

在不再需要临时表时删除临时表没有任何问题.我只是指出这不是必要的.

作为优先选择,我更喜欢表变量而不是临时表.更清楚的是,它们的范围在存储过程中,与其他变量相同.