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

SQL Server TRY...CATCH 區塊中取得完整錯誤資訊的標準寫法

     編輯:關於SqlServer

標準錯誤處理範本

BEGIN TRY
    -- 可能發生錯誤的 T-SQL 陳述式
    SELECT 1/0;  -- 示例:除以零
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();

    -- 重新拋出錯誤,保留原始嚴重度與狀態
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH;

關鍵函數說明

  • ERROR_MESSAGE():完整錯誤訊息文字。
  • ERROR_SEVERITY():嚴重等級(1-25)。
  • ERROR_STATE():狀態碼,輔助定位錯誤來源。
  • ERROR_NUMBER()、ERROR_LINE()、ERROR_PROCEDURE():亦可依需求擷取。

最佳實務

  1. 在 CATCH 區塊最前面宣告變數並一次性 SELECT 指派,避免多次函數呼叫。
  2. 使用 RAISERROR 而非 THROW(SQL 2012+)時,可保留原始嚴重度與狀態,利於上層應用程式判斷。
  3. 若需記錄至資料表,可在 RAISERROR 前插入 INSERT INTO ErrorLog ...。
  4. 記得在 CATCH 結尾 END CATCH,否則批次會中止。

此模式適用於 SQL Server 2005 及以上版本,是健全預存程序、批次腳本錯誤處理的基礎範本。

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