關於SQLServer2005的學習筆記——異常捕獲及處理

bq_wang發表於2010-03-19
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONESQLServer2005提供了類似於C#C++語言中的異常處理的錯誤處理機制。

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章