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

SQL Server 建立永久全域暫存表:啟動預存程序 + ##Global Table 技巧

     編輯:關於SqlServer

需求

一般全域暫存表 ##Temp 隨建立工作階段結束而消失。需求: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
BEGIN
    CREATE TABLE ##Globals
    (
        id    VARCHAR(36) NOT NULL PRIMARY KEY,
        value VARCHAR(500)
    )
END
GO

-- 標記為啟動預存程序
EXEC dbo.sp_procoption 'dbo.sp_Globals', 'startup', 'true'
GO

原理

  • sp_procoption ... 'startup', 'true' 讓 SQL Server 啟動時自動在背景執行該程序
  • 啟動程序建立的 ##Globals 會獲得 參考計數器 > 0,系統不會自動清理
  • 重啟 SQL Server 後,##Globals 自動重建

使用場景

  • 跨 Session 共用快取資料 (如系統參數、代碼表)
  • 避免頻繁讀取實體表,減輕 I/O
  • 替代 CONTEXT_INFO 或應用層快取的輕量方案

注意事項

  • 啟動程序在 master 資料庫,需 sysadmin 權限建立
  • 資料非持久化:重啟後資料遺失,啟動程序僅建立結構,初始資料需自行填充 (可在程序中 INSERT)
  • 大量資料請改用實體表 + 記憶體最佳化表 (SQL 2014+)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved