參考

http://technet.microsoft.com/zh-tw/library/ms179296(v=sql.105).aspx

目的

當處理交易內的資料發生錯誤,整批回復到交易之前的狀態

範例

CREATE TABLE TEMP_TABLE
(
ID int not null,
Name nvarchar(20) null
)

INSERT INTO TEMP_TABLE VALUES('2','BBB')
BEGIN TRY
 BEGIN TRAN
 DELETE TEMP_TABLE
 INSERT INTO TEMP_TABLE VALUES('1','AAA')
 INSERT INTO TEMP_TABLE VALUES('A','CCC')
 COMMIT TRAN
END TRY
BEGIN CATCH
 ROLLBACK TRAN
 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

SELECT * FROM TEMP_TABLE

DROP TABLE TEMP_TABLE

解說

在資料表TEMP_TABLE中,先新增一筆(2,BBB)的資料。開始進行Try Catch流程,先刪除TEMP_TABLE中的資料,再新增兩筆(1,AAA),(A,CCC),第二筆資料因為資料格式錯誤會發生錯誤訊息,因此跳進Catch流程,先Rollback處理交易的狀態,再顯示錯誤的相關資訊。

錯誤訊息資訊

ERROR_NUMBER :發生錯誤的錯誤代碼
ERROR_MESSAGE :發生錯誤的錯誤訊息
ERROR_SEVERITY :發生錯誤的錯誤層級
ERROR_STATE :發生錯誤的錯誤狀態
ERROR_PROCEDURE :發生錯誤的程序名稱
ERROR_LINE :發生錯誤的行數

備註

測試@Temp_Table不適用,資料還是會先被刪除,並且加入(1,AAA)此筆資料。

 

arrow
arrow

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