有時候為了數據完整我們會啟用到事務。正常的時候一帆風順,如果rollback 呢?
最簡單的一個回滾IF OBJECT_ID('PROC1') IS NOT NULL DROP PROCEDURE dbo.PROC1;GOCREATE PROCEDURE PROC1AS BEGIN BEGIN TRY BEGIN TRAN; SELECT 'Tran1' ,1; RAISERROR(16,1,1); SELECT 'Tran1' ,2; COMMIT TRAN; END TRY BEGIN CATCH SELECT 'Tran1' ,3; ROLLBACK TRAN; SELECT 'Tran1' ,4; RETURN -1; END CATCH; END;GO執行一下,拋出錯誤后繼續向下執行。

rollback在嵌套觸發器中,如果在觸發器的事務里面拋出錯誤,回滾之前觸發器的語句修改,繼續執行rollback之后的語句。但并不會激活之后的觸發器CREATE TABLE TestTR(ID INT PRIMARY KEY,Name NVARCHAR(50))CREATE TABLE TRTB1(ID INT PRIMARY KEY,Col1 INT)CREATE TRIGGER TR_TESTTR1 ON dbo.TestTR AFTERINSERT ASBEGIN TRYBEGIN TRANINSERT INTO dbo.TRTB1 ( ID, Col1 )VALUES ( 1, CONVERT(INT,'a') )COMMIT TRANEND TRYBEGIN CATCHROLLBACK TRANINSERT INTO dbo.TestTR ( ID, Name )VALUES ( 1, CONVERT(INT,'2') )END CATCHGOINSERT INTO TestTR ( ID, Name )VALUES ( 4, CONVERT(INT,'3') )
新聞熱點
疑難解答