Sql server SQL Server 2005中的临时表未自动删除
我正在对一个讨厌的存储过程进行故障排除,并注意到在运行它之后,我已经关闭了会话,tempdb中仍然保留了许多临时表。它们的名称如下:Sql server SQL Server 2005中的临时表未自动删除,sql-server,sql-server-2005,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 NO
#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不是一个选项
谢谢 使用前缀创建的表仅对当前连接可用。因此,您创建的任何新连接都将无法看到它们,因此无法删除它们 你怎么知道它们仍然存在?您正在运行什么命令来查找此问题 创建它们的连接是否正确关闭?如果不是,这可能就是它们仍然存在的原因
如果经常使用临时表或表变量,那么SQL不会删除它们,而是“截断”它们,留下定义。它节省了下次需要时重新创建表的工作量。您在哪里看到表仍然存在?使用tempdb go select*from INFORMATION_SCHEMA.tables谢谢-但我是此数据库实例的唯一用户。创建这些表的连接已断开。请说明如何才能看到这些表仍然存在?这是使用sp_表吗?从sysobjects中选择*?非常感谢-因此论坛帖子向我确认表是表变量的结果,优化器决定保留它们,因为它们经常被引用。我仍然希望消除它们,以消除我遇到的性能问题。删除一个表或让它超出范围实际上并不会立即删除它。您的批处理知道您已经删除了它,因此您无法再引用它,但它仍然存在。有一个后台进程来处理实际的丢弃过程。也许可以查看计数器临时表的销毁情况,看看这是否真的是性能问题的根源。您可以在“监视和故障排除”一节中找到有关这方面的详细信息。很多滚动:谢谢Aaron。24小时后,tempdb中出现了相同数量的表,但是我已断开了与数据库服务器的所有用户连接。我检查了您发布的那篇优秀文章中的性能计数器,要销毁的临时表的数量在12个多小时内一直为零。