在 SQL Server 中删除全局临时表 (##tempTable)
Posted
技术标签:
【中文标题】在 SQL Server 中删除全局临时表 (##tempTable)【英文标题】:Deleting Global Temporary Tables (##tempTable) in SQL Server 【发布时间】:2010-10-15 20:51:56 【问题描述】:SQL Server 是否会在给定时间不活动后自动清除它们,还是我需要担心自动清除它们?如果是这样,我如何查询要清除的表列表?
【问题讨论】:
【参考方案1】:当您关闭与 SQL Server 的连接时,本地临时表将被破坏。正常情况下无需手动清除它们。如果您维护持久连接或连接池,您可能希望养成在使用后立即删除临时表的习惯。
另一方面,由于全局临时表对给定数据库中的所有用户可见,因此它们与引用它们的最后一个连接一起被销毁。
【讨论】:
我认为报告服务不会是持久连接,所以我可以吗? 我认为这对于全局临时表是不正确的;我相信需要清除全局临时表(##MyTempTable),而对于普通临时表(#MyTempTable),你所说的适用......对吗? 我发现## 全局临时表不符合它在锡上所说的那样。如果我创建了一个 Windows 程序的 3 个实例,所有实例都具有一个开放的 SQL DB 连接,并且它们都创建和/或使用一个名为 ##hello 的临时表 - 当程序关闭时,您期望会发生什么?我预计##hello 在它们全部关闭时会被丢弃。事实上,只有当创建表的程序关闭时,表才会被删除。这不是它在 MS 文档中所说的,除非它自 2012 年以来发生了变化【参考方案2】:尽管在连接终止时会删除临时表,但通常仍认为显式删除此类表是一种很好的做法,以便绝对确定已进行清理。
例如,如果您的平台使用连接池,即连接可能永远不会被删除,那么您的临时表是否仍然存在?
为了检查临时表是否存在,您可以使用以下语句/检查。
if object_id('tempdb..##temptbl') is not null
begin
drop table ##temptbl
end
【讨论】:
【参考方案3】:在回答问题的第二部分时,要查询要清除的表列表,请尝试以下查询:
SELECT * FROM tempdb..sysobjects
这将列出所有当前的全局临时表
【讨论】:
谢谢,这真的很有用。【参考方案4】:对于 SQL Server 2016 及更高版本:
DROP TABLE IF EXISTS ##tempTable;
【讨论】:
以上是关于在 SQL Server 中删除全局临时表 (##tempTable)的主要内容,如果未能解决你的问题,请参考以下文章