1. 程式人生 > >儲存過程中簡單事務書寫方法

儲存過程中簡單事務書寫方法


每一次Begin Transaction都會引起@@TranCount加1。而每一次Commit Transaction都會使@@TranCount減1,而RollBack Transaction會回滾所有的巢狀事務包括已經提交的事務和未提交的事務,而使@@TranCount置0。

只有一個事務。開頭用begin transaction, 結尾用commit transaction 或者rollback transaction. 示例如下

--實現插入一條記錄,rollback最後回滾,commit 提交
create procedure  test_pro
as
begin  --儲存過程開頭

begin transaction  --事務開頭

insert into Student values('998888','小馬哥','國際貿易','22')
rollback transaction
--commit transaction    --事務結束

end  --儲存過程結束

這段加了個判斷
--實現插入一條記錄,定義一個@checkflag,分不同情況實現不同值。rollback最後回滾,commit 提交
create procedure  test_pro
as
begin  --儲存過程開頭
declare @checkflag integer
set @checkflag =2

begin transaction  --事務開頭

insert into Student values('998888','小馬哥','國際貿易','22')
if @checkflag =1
rollback transaction
else
commit transaction    --事務結束

end  --儲存過程結束

下面這段實現子事務commit, 那麼子事務需要對應的begin  transaction

create procedure  test_pro
as
begin
 
DECLARE @TransactionName varchar(20) 
set  @TransactionName ='Transaction1'
 
begin transaction
 
insert into Student values('998888','小馬哥','國際貿易','22')
begin transaction @TransactionName
save transaction @TransactionName
insert into Student values('998887','孫大聖','工商管理','99')
commit transaction @TransactionName
 
rollback transaction  -- commit transaction 用這個也可以 。這個是總體提交,rollback是回滾,即事務都不做。
end

下面這段子事務是rollback,它有或者沒有begin transaction都可以

create procedure  test_pro
as
begin

DECLARE @TransactionName varchar(20) 
set  @TransactionName ='Transaction1'

begin transaction
begin transaction @TransactionName
save transaction @TransactionName
--commit transaction @TransactionName
rollback transaction @TransactionName
rollback transaction

end