数据说明
- SET XACT_ABORT ON是设置事务回滚的!
- 当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚
- 为OFF时,只回滚错误的地方
事务的3个例子
1.goto 去返回事务,不受 SET XACT_ABORT off 影响
begin tran --标记事务的开始
begin
insert into Base_User (Code,Name,Password) values('1','1','1')
if @@Rowcount<1
goto Error1
insert into Base_User (Code,Name) values('1','1')
if @@Rowcount<1
goto Error1
insert into Base_User (Code) values('1')
if @@ROWCOUNT<1
goto Error1
end
commit tran --提交事务
print '正确执行' --正确执行
return
Error1:
rollback
print '错误' --更新申请状态失败
return
2.判断是否有错误,不受 SET XACT_ABORT off 影响
begin tran --开始执行事务
--语句一
insert into Base_User (Code,Name,Password) values('1','1','1')
insert into Base_User (Code,Name) values('1','1')
insert into Base_User (Code) values('1')
if @@error<>0 --判断如果语句有任何一条出现错误
begin rollback tran --开始执行事务的回滚
print 0
end
else --如何都执行成功
begin
commit tran --执行这个事务的操作
print 1
end
3.直接提交,受到SET XACT_ABORT off,会只回滚错误的地方,之前的数据不会回滚。导致数据库会有第一条数据
SET XACT_ABORT off
begin tran
begin
insert into Base_User (Code,Name,Password) values('1','1','1')
insert into Base_User (Code,Name) values('1','1')
insert into Base_User (Code) values('1')
end
commit tran
SET XACT_ABORT on
4.增加事务,如果其中一条出错,则所有语句全部回滚。这个才是重点
SET XACT_ABORT on
begin tran
begin
insert into Base_User (Code,Name,Password) values('1','1','1')
insert into Base_User (Code,Name) values('1','1')
insert into Base_User (Code) values('1')
end
commit tran
SET XACT_ABORT off