在存储过程结束时显式删除本地临时表的任何好处?

时间:2011-01-12 16:02:42

标签: sql sql-server tsql

考虑以下psuedo T-SQL代码(由存储过程执行):

CREATE TABLE #localTable ...

<do something with the temporary table here>

DROP TABLE #localTable;

DROP TABLE语句是存储过程执行的最后一个语句 - 该语句有什么好处吗?

请注意,我不是要求在存储过程的 middle 中删除临时表(本地或非本地)(即在不再需要表之后,但在存储结束之前)过程代码) - 由于减少了继续执行存储过程所需的内存,这似乎具有重要的好处。我想知道在存储过程完成执行时,显式删除表与“让”SQL Server执行此操作是否有任何好处(或任何影响,实际上,正面否定)。

3 个答案:

答案 0 :(得分:8)

有关此here的详细信息。

  

执行DROP TABLE时,临时对象将重命名为内部表单,并在下次执行时遇到CREATE TABLE时重命名为相同的用户可见名称。此外,还会缓存在临时表上自动创建的任何统计信息。这意味着下次调用过程时,前一次执行的统计信息仍然存在。

答案 1 :(得分:7)

这样做不会有害,但是当连接断开时表会被丢弃。我个人认为这是一个很好的习惯。它还允许开发人员,他们可能不得不在此工作,你不会忘记这样做。

答案 2 :(得分:0)

放下临时表是一个好习惯 否则在我们操作后消耗TEMP DB中的空间。

这将导致空间问题。 只有在收缩TEMP DB或重新启动服务器时才会清除此信息。