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迴圈自己感覺這是正確格式麼,自己很迷信的相信然後就以這樣...