在SQL服务器临时表2005年不会被自动删除(Temp tables in SQL Server 2

2019-08-31 11:00发布

我排查讨厌的存储过程,并注意到运行之后,我也闭上了会议,大量的临时表仍然留在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.

我连接到SQL Server系统管理员。 使用SP3 64位。 我目前有超过tempdb中这些表的1100,我不能摆脱他们。 有在数据库服务器上没有其他用户。

停止和启动SQL Server是不是在我的情况选择。

谢谢!

Answer 1:

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

如果临时表或表变量被频繁使用的话,而不是丢弃它们,SQL只是“截断”他们,留下的定义。 这样可以节省重新创建下一次需要它的表的努力。



Answer 2:

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

你怎么知道他们是否仍然存在? 什么命令你运行发现了这一点?

是创建他们正确地关闭了连接? 如果没有,那么这可能是为什么它们仍然存在。



文章来源: Temp tables in SQL Server 2005 not automatically dropped