2014-01-09 36 views
1

在ETL包開始SQL查詢以下運行對SQL Server 2012數據庫:爲什麼SSIS包創建的全局臨時表在完成後消失?

IF OBJECT_ID(N'tempdb..##SlotChanges') IS NOT NULL 
BEGIN 
DROP TABLE ##SlotChanges 
END 

CREATE TABLE ##SlotChanges 
(
    --Snip 
) 

的包,那麼寫一些行的臨時表,並用它作爲最終的數據源寫入目標時數據庫。

最後沒有drop命令,因爲它只會在下次運行開始時被檢查,但是如果我然後打開SSMS並針對表運行select,它將返回無效的對象異常。我可以在包運行時通過SSMS查詢表,但是隻要它完成了表的消失。

我的理解是即使包的會話已經丟失,全局臨時表仍應該保留。我想知道是否有人知道是什麼原因導致臨時表在程序包完成後掉落/超出範圍。

+3

你有一個[不正確的認識](http://technet.microsoft.com/en-us/library/ms186986(v = SQL.105)的.aspx)。 「全局臨時表對任何用戶以及創建後的任何連接都是可見的,並且當引用該表的所有用戶都從SQL Server實例斷開時,全局臨時表將被刪除。」 – billinkc

回答

2

您understaing是位不正確。全局臨時表在使用它的最後一次會議中得到放棄。

「 創建表的會話結束並且所有其他任務已停止引用它們時,將自動刪除全局臨時表。任務和表之間的關聯僅在單個Transact-SQL語句的生命週期中維護這意味着全局臨時表在該積極引用該表時,創建會話結束了最後的Transact-SQL語句的結束下降。 「

chekc的MSDN Create Table