SQL Server 提供超過 30 個系統全域變數(以 @@ 開頭),這些變數由系統自動維護,反映伺服器狀態、連線資訊、錯誤代碼等運行時資訊。開發者無法宣告或修改它們,只能讀取。善用這些變數能大幅簡化錯誤處理、效能監控與動態 SQL 撰寫。
| 變數 | 說明 | 典型應用場景 |
|---|---|---|
@@IDENTITY | 返回最後插入資料列的識別欄位值 | INSERT 後立即取得自增主鍵值 |
@@ERROR | 最後一條 T-SQL 語句的錯誤代碼(無錯誤為 0) | 舊版錯誤處理、TRY...CATCH 外的錯誤檢測 |
@@ROWCOUNT | 上一條語句影響的資料列數 | 判斷 UPDATE/DELETE 是否真正修改資料、分頁查詢總筆數 |
@@DBTS | 目前資料庫的時間戳值(保證唯一) | 樂觀鎖實作、資料版本控制 |
@@TRANCOUNT | 目前連線中作用中交易數 | 巢狀交易檢查、交易平衡驗證 |
@@SERVERNAME:本地 SQL Server 實例名稱@@REMSERVER:遠端伺服器名稱(登錄記錄中)@@CONNECTIONS:啟動以來連線/嘗試連線總數@@SPID:目前處理序 ID(可用於鎖定分析)@@VERSION:版本、處理器架構、建置日期完整資訊@@CPU_BUSY、@@IDLE、@@IO_BUSY:CPU 忙碌/閒置/IO 時間(毫秒)@@PACK_RECEIVED、@@PACK_SENT、@@PACKET_ERRORS:網路封包統計@@TOTAL_READ、@@TOTAL_WRITE、@@TOTAL_ERRORS:磁碟 IO 統計@@LANGID / @@LANGUAGE:目前語言 ID 與名稱@@DATEFIRST:每週第一天設定(1=週一...7=週日)@@LOCK_TIMEOUT:目前工作階段鎖等待逾時(毫秒,-1 表無限等待)@@TEXTSIZE:text/image 資料型別最大回傳長度@@NESTLEVEL:目前預存程序巢狀層級(初始 0)@@PROCID:目前執行預存程序的物件 ID@@CURSOR_ROWS:最後開啟游標的合格資料列數@@FETCH_STATUS:最後 FETCH 狀態(0=成功,-1=失敗,-2=資料列遺漏)@@OPTIONS:目前 SET 選項位元遮罩@@MAX_CONNECTIONS、@@MAX_PRECISION:最大連線數、decimal/numeric 最大精確度-- 快速檢視伺服器版本與目前連線數
SELECT
@@VERSION AS ServerVersion,
@@CONNECTIONS AS TotalConnectionsSinceStartup,
@@SPID AS CurrentSPID;
@@IDENTITY、SCOPE_IDENTITY()、IDENT_CURRENT():觸發器插入會導致 @@IDENTITY 返回觸發器產生的識別值,建議優先使用 SCOPE_IDENTITY()@@ERROR 在下一條語句執行後即重置,必須立即捕獲或搭配 TRY...CATCH@@CPU_BUSY 等)為累積值,適合做差分分析而非絕對值參考