1. 程式人生 > >SQL事務回滾

SQL事務回滾

ben

Begin Transaction:開始一個事務;
Commit Transaction:提交事務;
Rollback Transaction:回滾事務。

其中Commit Transaction 與Rollback Transaction 都必須有對應的Begin Transaction 才能正確被執行。

如:

Begin Tran
……
Rollback Tran
Commit Tran

以上事務只執行了回滾操作。執行Commit Tran系統會返回3902錯誤,即@@Error=3902,COMMIT TRANSACTION 請求沒有對應的 BEGIN TRANSACTION。

Begin Tran
……
Commit Tran
Rollback Tran

以上事務執行了提交事務操作。執行Rollback Tran系統會返回3903錯誤,即@@Error=3903,ROLLBACK TRANSACTION 請求沒有對應的 BEGIN TRANSACTION。

例項:使用@@Error返回值來控制回滾

設有表a,有欄位num (int),name (varchar(20));表b,有欄位num (int),Add (varchar(50))。以下是一個儲存過程,使用了@@Error的返回值來控制元件事件回滾:

  1. CREATE PROCEDURE [dbo].[TranTest]   
  2. @num int,@name varchar(20),@Add varchar(20)   
  3. AS   
  4. DECLARE @ErrorA int,@ErrorB int  
  5. begin transaction aa   
  6. insert into a values(@num,@name)   
  7. Set @ErrorA = @@error  
  8. insert into b values(@num,@Add)   
  9. Set @ErrorB = @@error  
  10. if @ErrorA>0 or @ErrorB>0  
  11. begin   
  12. Rollback transaction aa   
  13. end   
  14. else  
  15. commit transaction aa   
  16. GO  

begin transaction
declare @error int
set @error = 0
update bank set balance=balance-1000 where cid='0001'
set @error = @error + @@error
update bank set balance=balance + 1000 where cid='0002'
set @error = @error + @@error
if @error != 0
 rollback transaction
else
 commit transaction
go