【发布时间】:2010-10-15 20:51:56
【问题描述】:
SQL Server 是否会在给定时间不活动后自动清除它们,还是我需要担心自动清除它们?如果是这样,我如何查询要清除的表列表?
【问题讨论】:
SQL Server 是否会在给定时间不活动后自动清除它们,还是我需要担心自动清除它们?如果是这样,我如何查询要清除的表列表?
【问题讨论】:
当您关闭与 SQL Server 的连接时,本地临时表将被破坏。正常情况下无需手动清除它们。如果您维护持久连接或连接池,您可能希望养成在使用后立即删除临时表的习惯。
另一方面,由于全局临时表对给定数据库中的所有用户可见,因此它们与引用它们的最后一个连接一起被销毁。
【讨论】:
尽管在连接终止时会删除临时表,但通常仍认为显式删除此类表是一种很好的做法,以便绝对确定已进行清理。
例如,如果您的平台使用连接池,即连接可能永远不会被删除,那么您的临时表是否仍然存在?
为了检查临时表是否存在,您可以使用以下语句/检查。
if object_id('tempdb..##temptbl') is not null
begin
drop table ##temptbl
end
【讨论】:
在回答问题的第二部分时,要查询要清除的表列表,请尝试以下查询:
SELECT * FROM tempdb..sysobjects
这将列出所有当前的全局临时表
【讨论】:
对于 SQL Server 2016 及更高版本:
DROP TABLE IF EXISTS ##tempTable;
【讨论】: