T-SQL 裡的 Error Handle 比較少人提到, 其實在撰寫 stored procedure 可以幫助除錯, 也可以自訂回饋給前端的訊息.
基本語法:
:
END TRY
BEGIN CATCH
:
END CATCH
.TRY 及 CATCH 區塊必須搭配使用。
.TRY 及 CATCH 區塊間不可有其他的 T-SQL
.在 TRY 區塊間的 T-SQL,若發生錯誤,則會跳至 CATCH 區塊執行,然後中斷;若沒有錯誤,則會跳過 CATCH 區塊,然後繼續其後的敍述。
錯誤處理, 可用函數:
int ERROR_LINE(); --傳回發生錯誤的行數
PRINT N'Error Line: ' + CAST(ERROR_LINE() AS nvarchar(100));
END CATCH
int ERROR_NUMBER(); --傳回系統錯誤代號
(早期的 MS SQL 版本,可用 @@ERROR)
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
留言列表