什么时候全局临时表在SQL Server中被销毁?

时间:2014-06-24 05:38:29

标签: sql-server

我对全局临时表的使用感到困惑。我创建了一个全局临时表

//会话52:创作者会话

Create Table ##temp(i int) 
Insert Into ##temp(i) Values(1),(2),(3)
Select * From ##temp

//第56节

Select * From ##temp

//会话57:持有## temp

参考的最后一个会话
Select * From ##temp

现在如果我关闭Session 52,## temp表会破坏。

我相信在以下情况下发布的全局临时表

  1. 任何会话明确删除
  2. 创建者会话已关闭且没有其他会话引用此会话。
  3. 我对引用此会话的会话(创建者会话)感到困惑 这是什么意思?

2 个答案:

答案 0 :(得分:3)

来自CREATE TABLE

  

当创建表的会话结束且所有其他任务已停止引用它们时,将自动删除全局临时表。任务和表之间的关联仅在单个Transact-SQL语句的生命周期内维护。这意味着在创建会话结束时主动引用表的最后一个Transact-SQL语句完成时删除全局临时表

虽然作为个人挑选,我在最后一句中使用了after而不是when

因此,根据您的示例,会话57保留全局临时表,只要它实际上执行依赖于表的语句。一旦该语句完成 - 因此会话已转移到另一个语句或它处于空闲状态 - 全局临时表将被删除。

答案 1 :(得分:1)

全局临时表仅在当前用户断开连接并且所有引用它的会话都关闭时销毁。 这意味着除非与用户(会话创建者)相关的所有会话都未关闭,否则不会销毁全局临时表。