T-SQL 裡的 Error Handle 比較少人提到, 其實在撰寫 stored procedure 可以幫助除錯, 也可以自訂回饋給前端的訊息.

基本語法:

BEGIN TRY

    :

END TRY

BEGIN CATCH

    :

END CATCH

.TRY 及 CATCH 區塊必須搭配使用。

.TRY 及 CATCH 區塊間不可有其他的 T-SQL

.在 TRY 區塊間的 T-SQL,若發生錯誤,則會跳至 CATCH 區塊執行,然後中斷;若沒有錯誤,則會跳過 CATCH 區塊,然後繼續其後的敍述。

 

錯誤處理, 可用函數:

int ERROR_LINE();    --傳回發生錯誤的行數

BEGIN CATCH

PRINT N'Error Line: ' + CAST(ERROR_LINE() AS nvarchar(100));

END CATCH

 

int ERROR_NUMBER();    --傳回系統錯誤代號

(早期的 MS SQL 版本,可用 @@ERROR)

BEGIN CATCH

IF ERROR_NUMBER() = 220   

PRINT N'The number is too large to carry';  

END CATCH

 

nvarchar ERROR_MESSAGE();    --傳回系統錯誤訊息

 

int ERROR_SEVERITY();

ps: 這並非 Error 的嚴重程度, 只是標明 Error 的分類而已.

 

最後, 擷取自 MSDN 上的範例:

USE AdventureWorks;
GO

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO


參考資料:

http://www.functionx.com/sqlserver/Lesson09.htm

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHT/tsqlref9/html/50228f2f-6949-4d2e-8e43-fad11bf973ab.htm

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 cbw0731 的頭像
    cbw0731

    A little IT experience/study/share garden

    cbw0731 發表在 痞客邦 留言(0) 人氣()