儲存過程中簡單事務書寫方法
阿新 • • 發佈:2019-02-02
每一次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