全球临时表

时间:2016-02-04 13:01:25

标签: sql-server

我正在尝试全球临时桌面。根据我的理解,全局表应该可以由其他用户和连接创建后访问。一旦关闭了对全局临时表的所有引用,就会删除该表。

但实际上我看不到这种情况。我打开了两个sql server会话创建了一个全局临时表,然后从另一个会话尝试了一个select命令,所以它们都是活动的。

现在,当我关闭用于创建全局临时表的会话时,表将被删除。

为什么即使有另一个活动会话引用全局临时表呢?

1 个答案:

答案 0 :(得分:2)

  

任何用户和任何连接都可以看到全局临时表   创建它们之后,当所有用户都被删除时被删除   引用表断开与SQL Server实例的连接

另一个会话没有主动引用临时表。

读取它时需要锁定,然后在读取表格后立即将其释放。

您需要在至少REPEATABLE READ隔离级别的事务中运行它,以便将其他会话计为引用它并防止丢弃。

第1节

CREATE TABLE ##T
(
X INT
)

第2节

BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

SELECT *
FROM ##T;


RAISERROR('Waiting ...',0,1) WITH NOWAIT;
WAITFOR DELAY '00:00:10'; --Now can close the other session


SELECT *
FROM ##T;   --And the table should still be there

COMMIT