嵌套事务回滚示例

参考: sql事务(Transaction)用法介绍及回滚实例

-- 测试表
create table T1
	(
	ID int identity(1,1),
	Code nvarchar(10) 
	)
Go

-- 存储过程
create procedure p_RollbackTest 
as 
begin
	set nocount on
	declare @n int = 0 
	
	begin tran outTrans
	insert into T1(Code) values('A')		-- 保存入表中	

	begin try 
		begin tran innerTrans 

		insert into T1(Code) values('B')	-- savepoint之前,保存入表中

		save tran savepoint			-- 创建事务保存点 
		
		insert into T1(Code) values('C')	-- savepoint之后,丢弃
				
		set @n = 10 / 0				-- 异常
		
		commit tran innerTrans 
	end try 
	begin catch 
		rollback tran savepoint			--回滚到保存点 
		commit tran innerTrans			-- 注意:这里用rollback tran会出错,只能用commit tran
	end catch 
	
	insert into T1(Code) values('D')		-- 保存入表中		
	commit tran outTrans	
end
Go 

Exec p_RollbackTest
Go 

select * from T1 
Go 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值