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

SQL Server 2000 全域變數完整手冊:系統狀態、錯誤處理與效能監控的關鍵指標

     編輯:關於SqlServer

前言

全域變數(Global Variables)是 SQL Server 提供的特殊系統變數,以 @@ 前綴識別,唯讀(部分可透過 SET 間接影響),反映伺服器、連線、交易、錯誤等運行時狀態。精通全域變數是撰寫健壯 T-SQL、有效除錯與效能調校的關鍵技能。

核心全域變數分類速查表

分類變數用途與回傳值說明
身分與版本@@VERSION伺服器版本、處理器架構、建置日期完整字串
@@SERVERNAME本地伺服器名稱(可透過 sp_addserver 修改)
@@SERVICENAME執行個體服務名稱(MSSQLSERVER 或具名執行個體名)
@@LANGUAGE / @@LANGID目前連線語言名稱 / ID
連線與工作階段@@SPID目前處理序 ID(對應 sys.sysprocesses.spid)
@@CURSOR_ROWS游標結果集資料列數(-1 表非同步填充中)
@@FETCH_STATUS上次 FETCH 狀態:0 成功、-1 失敗/超出範圍、-2 資料列遺失
@@OPTIONS目前 SET 選項位元組合(ANSI_NULLS, QUOTED_IDENTIFIER 等)
@@DATEFIRST / @@DATEFORMAT每週第一天設定 / 日期格式
交易與鎖定@@TRANCOUNT目前交易巢狀層級(BEGIN TRAN 遞增,COMMIT/ROLLBACK 遞減)
@@LOCK_TIMEOUT鎖定等待逾時毫秒數(-1 表無限等待)
@@DEADLOCK死鎖偵測相關(較新版本擴充)
@@NESTLEVEL預存程序/觸發器呼叫巢狀層級(上限 32)
@@PROCID目前執行預存程序物件 ID
錯誤與資料列@@ERROR上次陳述式錯誤號(0 表成功,每句重置,需立即捕獲)
@@ROWCOUNT上次陳述式影響資料列數(SELECT/INSERT/UPDATE/DELETE 皆更新)
@@IDENTITY上次插入產生的身分值(跨表/觸發器範圍,慎用)
SCOPE_IDENTITY()函數非變數:當前範圍內最新身分值(推薦替代 @@IDENTITY)
資料列偏移與游標@@CURSOR_ROWS游標資料列計數
@@FETCH_STATUSFETCH 操作結果狀態
@@MAX_CONNECTIONS允許最大同時連線數

實戰應用模式

1. 錯誤處理黃金模式

BEGIN TRY
-- 高風險操作
INSERT ...
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrNo, ERROR_MESSAGE() AS ErrMsg;
-- 或舊版相容模式
IF @@ERROR <> 0 BEGIN ... END
END CATCH

2. 交易巢狀控制

IF @@TRANCOUNT = 0 BEGIN TRANSACTION;
-- 業務邏輯
IF @@TRANCOUNT > 0 COMMIT TRANSACTION;

3. 身分值安全取回

INSERT INTO Orders ...;
DECLARE @NewOrderID int = SCOPE_IDENTITY(); -- 推薦
-- 避免使用 @@IDENTITY(觸發器插入其他表會汙染)

4. 批次處理進度追蹤

WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM cur INTO @var;
-- 處理邏輯
END

圖表參考

全域變數分類 1 全域變數分類 2 全域變數分類 3 全域變數分類 4

結語

全域變數是 T-SQL 運行時的「儀表板」。熟練運用 @@ERROR、@@ROWCOUNT、@@TRANCOUNT、SCOPE_IDENTITY() 等核心指標,能寫出更可靠、可觀測、可維護的資料庫程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved