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

时间:2009-10-22 13:43:35

标签: sql-server sql-server-2005

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

#000E262B
#002334C4
#004E1D4D
#00583EEE
#00783A7F
#00832777
#00CD403A
#00E24ED3
#00F75D6C

如果我运行此代码:

if object_id('tempdb..#000E262B') is null   
print 'Does NOT exist!'

我明白了:

Does NOT exist!

如果我这样做:

use tempdb
go
drop TABLE #000E262B

我收到错误:

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

使用#前缀创建的表仅可用于当前连接。因此,您创建的任何新连接都将无法看到它们,因此无法删除它们。

你怎么能说它们仍然存在?你正在运行什么命令来找到它?

创建它们的连接是否正确关闭?如果没有,那么这可能就是他们仍然存在的原因。