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

Ken*_*itt 18 sql t-sql sql-server

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

CREATE TABLE #localTable ...

<do something with the temporary table here>

DROP TABLE #localTable;
Run Code Online (Sandbox Code Playgroud)

DROP TABLE声明是存储过程执行的最后一个声明 - 该声明是否有任何好处?

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

rag*_*eit 8

即使世界上这是一个很好的详细职位这里.

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


Ran*_*der 7

这样做不会有害,但是当连接断开时表会被丢弃.我个人认为这是一个很好的习惯.它还允许开发人员(可能需要对此进行操作)不要忘记这样做.

  • @RandyMinder - 只有在顶级范围内创建它们才会出现这种情况.如果在子作用域(例如过程调用)中创建,则会在作用域退出时自动清除它们.对于一个程序,如果没有缓存表,或者按照rageit的答案,清理将会丢失. (5认同)