在SQL Server中創(chuàng)建全局臨時(shí)表技巧
全局臨時(shí)表的生命周期一直持續(xù)到創(chuàng)建會(huì)話(不是創(chuàng)建級(jí)別)才終止。例如,如果你在存儲(chǔ)過程中創(chuàng)建全局臨時(shí)表,當(dāng)超出存儲(chǔ)過程的范圍時(shí),該表并不會(huì)被銷毀。當(dāng)創(chuàng)建會(huì)話終止后,Sql Server才會(huì)自動(dòng)嘗試刪除該表,其他會(huì)話中對(duì)其提交的所有語句都將結(jié)束,并釋放它們所保持的所有鎖。
但在某些情況下,你可能想創(chuàng)建一個(gè)不屬于任何會(huì)話的全局臨時(shí)表。這時(shí),無論哪個(gè)會(huì)話打開或關(guān)閉,它總數(shù)存在,只有顯式的刪除它才能被移除。為此,可以在一個(gè)特殊的存儲(chǔ)過程中(使用sp_前綴,在master中創(chuàng)建)創(chuàng)建該表并使用“startup”選項(xiàng)標(biāo)記該存儲(chǔ)過程。Sql Server會(huì)在每次啟動(dòng)時(shí)調(diào)用啟動(dòng)過程(startup procedure)。而且,Sql Server為啟動(dòng)過程中創(chuàng)建的全局臨時(shí)表維護(hù)一個(gè)大于0的引用計(jì)數(shù)器,這樣就確保Sql Server不會(huì)嘗試自動(dòng)刪除它。
如下所示:
USE master; |
EXEC dbo.sp_procoption 'dbo.sp_Globals','startup','true';
執(zhí)行并重啟Sql Server后,全局臨時(shí)表##Globals會(huì)自動(dòng)重建并一直持續(xù)到被顯式刪除。
【編輯推薦】