關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異常的捕獲及處理
- 關於SQLServer2005的學習筆記——XML的處理SQLServer筆記XML
- 【筆記】forall 異常捕獲筆記
- 異常處理機制(二)之異常處理與捕獲
- swoft 學習筆記之異常處理筆記
- C#學習筆記---異常捕獲和變數運算子C#筆記變數
- SpringMVC學習筆記10-異常處理SpringMVC筆記
- Mysql系列第十九講 異常捕獲及處理詳解MySql
- 異常處理 - Go 學習記錄Go
- 記錄Javascript 異常捕獲JavaScript
- IOS系統閃退異常(Crash)捕獲處理iOS
- java異常處理筆記Java筆記
- 如何處理 Node.js 中出現的未捕獲異常?Node.js
- 關於SQLServer2005的學習筆記(一)——前言SQLServer筆記
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- C/C++學習筆記八(斷言與異常處理)C++筆記
- C#中有關異常的捕獲演示C#
- 捕獲 React 異常React
- iOS異常捕獲iOS
- 關於SQLServer2005的學習筆記——生日問題SQLServer筆記
- 關於SQLServer2005的學習筆記——子查詢SQLServer筆記
- 關於SQLServer2005的學習筆記——分析函式SQLServer筆記函式
- log列印及異常處理相關
- JAVA學習之異常處理Java
- java學習筆記(異常)Java筆記
- 異常處理-PHP手冊筆記PHP筆記
- 關於SQLServer2005的學習筆記——樹形結構SQLServer筆記
- python異常捕獲Python
- Java中的異常處理(隨堂筆記)Java筆記
- Python零基礎學習筆記(二十八)——異常處理Python筆記
- 【java學習之再遇異常處理】Java
- STREAMS筆記(3) REDO清理 & 異常處理筆記
- 關於捕獲VCL沒有處理的Windows訊息 (轉)Windows
- restframework 異常處理及自定義異常RESTFramework
- Auth 授權的異常捕獲
- 關於resmgr:cpu quantum異常等待處理
- 記錄使用 guzzlehttp 異常捕獲踩坑記錄HTTP
- 異常處理流程(不相容SQLServer2005)SQLServer