一般全域暫存表 (##Table) 生命週期隨建立工作階段 結束而終止,即使在預存程序中建立,離開程序範圍也不會被銷毀,但工作階段結束時仍會自動清除。
解法:在 master 資料庫建立 啟動預存程序,於 SQL Server 啟動時自動建立 ##Globals,並由系統維護參考計數器防止自動清除。
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';
GO
sp_Globals → 建立 ##Globals##Globals,跨連線共享資料DROP TABLE ##Globals 才能移除master、擁有 sysadmin 權限建立tempdb,謹慎評估必要性