SQL Server 2005中的临时表不会自动删除

Mar*_*son 2 sql-server sql-server-2005

我正在对一个讨厌的存储过程进行故障排除,并注意到在运行它之后,我已经关闭了我的会话,许多临时表仍然留在tempdb中.它们的名称如下:

#000E262B
#002334C4
#004E1D4D
#00583EEE
#00783A7F
#00832777
#00CD403A
#00E24ED3
#00F75D6C
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码:

if object_id('tempdb..#000E262B') is null   
print 'Does NOT exist!'
Run Code Online (Sandbox Code Playgroud)

我明白了:

Does NOT exist!
Run Code Online (Sandbox Code Playgroud)

如果我做:

use tempdb
go
drop TABLE #000E262B
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#000E262B', because it does not exist or you do not have permission.
Run Code Online (Sandbox Code Playgroud)

我作为sysadmin连接到SQL Server.使用SP3 64位.我目前在tempdb中有超过1100个这样的表,我无法摆脱它们.数据库服务器上没有其他用户.

在我的情况下,停止和启动SQL Server不是一个选项.

谢谢!

Dmi*_*ryK 8

http://www.sqlservercentral.com/Forums/Topic456599-149-1.aspx

如果经常使用临时表或表变量,那么SQL只是"截断"它们而不是删除它们,而是留下定义.它节省了下次需要时重新创建表的工作量.

  • 删除表或让它超出范围实际上并不会立即删除它.你的批次知道你丢弃了它,所以你不能再引用它,但它仍然存在.有一个后台进程处理实际的删除过程.也许看一下"Temp Tables for Destruction"这个计数器,看看这是否真的是你性能问题的根源.您可以在"监视和疑难解答"部分(大量滚动)中找到有关此内容的详细信息:http://msdn.microsoft.com/en-us/library/cc966545.aspx#EDAA (3认同)