SQL事務回滾

2021-08-08 17:05:07 字數 1588 閱讀 5881

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]  

@numint,@name varchar(20),@add varchar(20)  

as  

declare @erroraint,@errorbint

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

SQL 事務回滾

事務 transaction 是併發控制的單位,是使用者定義的乙個操作序列。這些操作要麼都做,要麼都不做,是乙個不可分割的工作單位。通過事務,sql server能將邏輯相關的一組操作繫結在一起,以便伺服器保持資料的完整性 1.建立表 create table tuser usercode varc...

事務回滾與手動回滾

一般我們在開發時,在方法或者類上加了 transactional事務註解,然後會用 try catch 將可能會出問題的 塊包起來,在catch裡面處理捕獲的異常,但是,如果在catch裡面沒有把異常丟擲去,此時事務是不會自動回滾的 比如這種情況 這裡既沒有丟擲異常,也沒有手動回滾,在插入流水表之後...

事務回滾反思

自己以後就用這個部落格了,部落格的更改給大家帶來了很多不便,以前的部落格 停用,因為對於專業的人來說應該用專業的東西,用龐大的技術去顯示it技術的魅力,顯示我們是一支龐大的力量。今天技術總結,看到師姐寫得事件回滾,自己就研究去了,看到有個for迴圈自己感覺這是正確格式麼,自己很迷信的相信然後就以這樣...