在SQL SERVER中實現事務的部分回滾
阿新 • • 發佈:2019-02-17
1.儲存點:是一種實現部分回滾的方法。可以給一個儲存點起一個名字,以便在後面的事務中可以回滾到儲存點。
2.實現程式碼。
BEGIN TRANSACTION Transaction_Name
SQL_Statement1
SQL_Statement2 SAVE TRANSACTION Save_Name --設定儲存點 SQL_Statement3
SQL_Statement4 IF Test_Condition_Fails ROLLBACK TRANSACTION Save_Name --回滾到儲存點 SQL_Statement5
SQL_Statement6 COMMIT TRANSACTION Transaction_Name 或 BEGIN TRANSACTION Transaction_Name
SQL_Statement1
SQL_Statement2
SAVE TRANSACTION Save_Name --設定儲存點
SQL_Statement3
SQL_Statement4
IF Test_Condition_Fails)
BEGIN
ROLLBACK TRANSACTION Save_Name --回滾到儲存點
RETURN
END
ELSE
BEGIN
SQL_Statement5
SQL_Statement6
END
COMMIT TRANSACTION Transaction_Name 3.如果沒有儲存點時,ROLLBACK命令後面只能跟最外層事務的名字,而不能跟其他事務的名字。不論ROLLBACK命令在巢狀那一層發生時,如果其後沒有事務名,則將事務回滾整個事務到頂層,這和回滾最外層事務是一樣的。在巢狀事務中,不能僅回滾某一層事務,除非你指定了一個儲存點,然後回滾到儲存點。
SQL_Statement1
SQL_Statement2 SAVE TRANSACTION Save_Name --設定儲存點 SQL_Statement3
SQL_Statement4 IF Test_Condition_Fails ROLLBACK TRANSACTION Save_Name --回滾到儲存點 SQL_Statement5
SQL_Statement6 COMMIT TRANSACTION Transaction_Name 或 BEGIN TRANSACTION Transaction_Name
SQL_Statement1
SQL_Statement2
SAVE TRANSACTION Save_Name --設定儲存點
SQL_Statement3
SQL_Statement4
IF Test_Condition_Fails)
BEGIN
ROLLBACK TRANSACTION Save_Name --回滾到儲存點
RETURN
END
ELSE
BEGIN
SQL_Statement5
SQL_Statement6
END
COMMIT TRANSACTION Transaction_Name 3.如果沒有儲存點時,ROLLBACK命令後面只能跟最外層事務的名字,而不能跟其他事務的名字。不論ROLLBACK命令在巢狀那一層發生時,如果其後沒有事務名,則將事務回滾整個事務到頂層,這和回滾最外層事務是一樣的。在巢狀事務中,不能僅回滾某一層事務,除非你指定了一個儲存點,然後回滾到儲存點。