關於SQLServer2005的學習筆記——異常捕獲及處理
Transact-SQL 語句組可以包含在 TRY 塊中。如果 TRY 塊內部發生錯誤,則會將控制傳遞給 CATCH 塊中包含的另一個語句組。
相關錯誤訊息如下:
ERROR_NUMBER() 返回錯誤號。
ERROR_SEVERITY() 返回嚴重性。
ERROR_STATE() 返回錯誤狀態號。
ERROR_PROCEDURE() 返回出現錯誤的儲存過程或觸發器的名稱。
ERROR_LINE() 返回導致錯誤的例程中的行號。
ERROR_MESSAGE() 返回錯誤訊息的完整文字。
--讓我們看看SQLServer2000下的錯誤捕獲,對於某些錯誤實際上是無法捕獲的
DECLARE @ErrNum INT,@RowCount INT; --能夠捕獲的0做除數錯誤 SELECT 1/0; SET @ErrNum=@@error; SET @RowCount=@@rowcount; PRINT 'Encount ERROR'; PRINT @ErrNum PRINT @RowCount --不能被捕獲的資料轉換錯誤 SELECT 'A'+1 SET @ErrNum=@@error; SET @RowCount=@@rowcount; PRINT 'Encount Serious ERROR'; PRINT @ErrNum PRINT @RowCount |
--建立一張通用日誌表,以捕獲程式碼執行過程中的相關錯誤
CREATE TABLE LogTable ( ID INT IDENTITY (1,1) NOT NULL, ErrorNumber INT, ErrorMessage VARCHAR(1000), ErrorSeverity INT, ErrorState INT, ErrorLine INT, ErrorProcedure VARCHAR(128) ); |
--建立一個儲存過程,以進行錯誤捕獲
CREATE PROCEDURE TestTryCatchProc AS --相關業務邏輯 BEGIN TRY SELECT 1/0; END TRY --相關錯誤捕獲 BEGIN CATCH PRINT 'Error Numberv' + CAST(ERROR_NUMBER() AS VARCHAR(10)); PRINT 'Error Serverity: ' + CAST(ERROR_SEVERITY() AS VARCHAR(10)); PRINT 'Error State: ' + CAST(ERROR_STATE() AS VARCHAR(10)); PRINT 'Error Procedure: ' + ERROR_PROCEDURE(); PRINT 'Error Line: ' + CAST(ERROR_LINE() AS VARCHAR(10)); PRINT 'Error Message: ' + ERROR_MESSAGE(); INSERT INTO LogTable(ErrorNumber,ErrorSeverity,ErrorState,ErrorProcedure,ErrorLine,ErrorMessage) VALUES(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(),ERROR_LINE(),ERROR_MESSAGE()) --此處可以先對相關錯誤進行修正 END CATCH; --執行相關儲存過程,並查詢日誌表,同時與系統訊息表進行對比 EXEC TestTryCatchProc SELECT * FROM LogTable SELECT * FROM sys.messages WHERE message_id=8134 AND language_id=2052 |
參考
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/8c16ecdf-68f4-4a2a-b594-086e3344e58a.htm
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/248df62a-7334-4bca-8262-235a28f4b07f.htm
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-629890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異常處理機制(二)之異常處理與捕獲
- swoft 學習筆記之異常處理筆記
- 異常及捕獲
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- C#學習筆記---異常捕獲和變數運算子C#筆記變數
- Mysql系列第十九講 異常捕獲及處理詳解MySql
- 異常處理 - Go 學習記錄Go
- IOS系統閃退異常(Crash)捕獲處理iOS
- java異常處理筆記Java筆記
- 記錄Javascript 異常捕獲JavaScript
- 如何處理 Node.js 中出現的未捕獲異常?Node.js
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- python異常捕獲Python
- 捕獲 React 異常React
- Python零基礎學習筆記(二十八)——異常處理Python筆記
- JAVA學習之異常處理Java
- Task異常捕獲的方式
- Java中的異常處理(隨堂筆記)Java筆記
- java學習筆記(異常)Java筆記
- rust學習十、異常處理(錯誤處理)Rust
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- 筆記:異常處理之report與render筆記
- restframework 異常處理及自定義異常RESTFramework
- Auth 授權的異常捕獲
- 記錄使用 guzzlehttp 異常捕獲踩坑記錄HTTP
- bug及異常處理1
- wpf 捕獲全域性異常
- python中如何捕獲異常Python
- pb呼叫ole異常捕獲
- Python學習之 異常處理詳解Python
- SpringMVC學習系列(10) 之 異常處理SpringMVC
- Spring Boot 中關於自定義異常處理的套路!Spring Boot
- Django筆記三十一之全域性異常處理Django筆記
- 10. 異常捕獲、生成式
- JS 使用try catch捕獲異常JS
- SpringBoot之全域性捕獲異常Spring Boot
- 《C++ Primer》學習筆記(五):迴圈、分支、跳轉和異常處理語句C++筆記
- Java學習筆記-Day21 Java System類、Class類、內部類、異常處理Java筆記
- 重學Java - 異常處理Java