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的返回值來控制元件事件回滾:
- CREATE PROCEDURE [dbo].[TranTest]
- @num int,@name varchar(20),@Add varchar(20)
- AS
- DECLARE @ErrorA int,@ErrorB int
- begin transaction aa
- insert into a values(@num,@name)
- Set @ErrorA = @@error
- insert into b values(@num,@Add)
- Set @ErrorB = @@error
- if @ErrorA>0 or @ErrorB>0
- begin
- Rollback transaction aa
- end
- else
- commit transaction aa
- 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