原創|其它|編輯:郝浩|2009-11-25 11:33:38.000|閱讀 458 次
概述:全局臨時表的生命周期一直持續到創建會話才終止。如果你在存儲過程中創建全局臨時表,當超出存儲過程的范圍時,該表并不會被銷毀。當創建會話終止后,SQL Server才會自動嘗試刪除該表。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
全局臨時表的生命周期一直持續到創建會話(不是創建級別)才終止。例如,如果你在存儲過程中創建全局臨時表,當超出存儲過程的范圍時,該表并不會被銷毀。當創建會話終止后,SQL Server才會自動嘗試刪除該表,其他會話中對其提交的所有語句都將結束,并釋放它們所保持的所有鎖。
但在某些情況下,你可能想創建一個不屬于任何會話的全局臨時表。這時,無論哪個會話打開或關閉,它總數存在,只有顯式的刪除它才能被移除。為此,可以在一個特殊的存儲過程中(使用sp_前綴,在master中創建)創建該表并使用“startup”選項標記該存儲過程。Sql Server會在每次啟動時調用啟動過程(startup procedure)。而且,Sql Server為啟動過程中創建的全局臨時表維護一個大于0的引用計數器,這樣就確保Sql Server不會嘗試自動刪除它。
如下所示:
USE master;
GO
IF OBJECT_ID('dbo.sp_Globals') IS NOT NULL
DROP PROC dbo.sp_Globals
GO
CREATE proc dbo.sp_Globals
AS
CREATE TABLE ##Globals
(
id varchar(36) NOT NULL PRIMARY KEY,
value varchar(500)
);
GO
EXEC dbo.sp_procoption 'dbo.sp_Globals','startup','true';
執行并重啟Sql Server后,全局臨時表##Globals會自動重建并一直持續到被顯式刪除。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載