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():亦可依需求擷取。SELECT 指派,避免多次函數呼叫。RAISERROR 而非 THROW(SQL 2012+)時,可保留原始嚴重度與狀態,利於上層應用程式判斷。RAISERROR 前插入 INSERT INTO ErrorLog ...。END CATCH,否則批次會中止。此模式適用於 SQL Server 2005 及以上版本,是健全預存程序、批次腳本錯誤處理的基礎範本。