set XACT_ABORT ON与判断事务的异同

1.set XACT_ABORT ON

当SET XACT_ABORTON,如果Transact-SQL语句产生运行时错误,整个事务将终止并回滚,OFF,只回滚产生错误的Transact-SQL语句,而事务将继续进行处理.

2.判断事务

sql中用事务的时候一般是这么写
begin tran
sql语句
if @@error>0
rollback tran
else
commit tran

3.异同

判断事务回滚,则整个事务里面的sql语句一起回滚,SET XACT_ABORT ON相似,不同的是当事务进行嵌套时,如果用事务判断的方法,嵌套的子事务不出错,外面语句出错,那么整个事务只会回滚外面出错的语句,子事务提交成功了就回滚不了了,但是用SET XACT_ABORT ON,即使子事务提交成功,如果外围事务出错,子事务还是回滚.

4.举例

create table tran1(id int,name varchar(10))
create table tran2(id int,name varchar(10))
--存储过程1
create proc TesTran as
begin
begin tran
insert into tran1 values (1,'1的极')
insert into tran2 values (2,'2的的是')
if @@error>0
rollback tran
else
commit tran
end


--存储过程2
create proc TesTranAll as
begin
begin tran
insert into tran1 values (1,'1的十分十分师范生')--值太长错误
exec TesTran
if @@error>0
rollback tran
else
commit tran
end

delete from  tran1
delete from tran2

--执行存储过程
--exec TesTran
exec TesTranAll
我这样写的话,执行完后查询表2个表里面都有数据了,如果我把存储过程2改成:

alter proc TesTranAll as
begin
set XACT_ABORT on
begin tran
insert into tran1 values (1,'1的十分十分师范生')
exec TesTran
commit tran
end

这样的话,执行存储过程2,查询2个表就都没有数据!
--执行存储过程后,查询表
select * from tran1
select * from tran2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值