首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 全域暫存表進階:建立持久化全域暫存表 (啟動預存程序法)

     編輯:關於SqlServer

一般全域暫存表 (##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

運作機制

  1. SQL Server 啟動 → 自動執行 sp_Globals → 建立 ##Globals
  2. 系統為啟動程序建立的全域暫存表維護 參考計數器 > 0,阻止自動清除
  3. 任何工作階段皆可存取 ##Globals,跨連線共享資料
  4. 僅 顯式 DROP TABLE ##Globals 才能移除

應用場景

  • 跨 Session 的應用程式快取/設定共享
  • 輕量級跨資料庫鎖協調旗標
  • ETL 流程中繼狀態共享

注意事項

  • 啟動程序需在 master、擁有 sysadmin 權限建立
  • 資料非持久化,重啟後重置;若需持久化請改用實體表
  • 濫用會污染 tempdb,謹慎評估必要性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved