我正在对一个讨厌的存储过程进行故障排除,并注意到在运行它之后,我已经关闭了我的会话,许多临时表仍然留在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不是一个选项。
谢谢!
答案 0 :(得分:8)
http://www.sqlservercentral.com/Forums/Topic456599-149-1.aspx
如果经常使用临时表或表变量,那么SQL只是“截断”它们而不是删除它们,而是留下定义。它节省了下次需要时重新创建表的工作量。
答案 1 :(得分:0)
使用#前缀创建的表仅可用于当前连接。因此,您创建的任何新连接都将无法看到它们,因此无法删除它们。
你怎么能说它们仍然存在?你正在运行什么命令来找到它?
创建它们的连接是否正确关闭?如果没有,那么这可能就是他们仍然存在的原因。