MSSQL 事务

数据说明

  • 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

posted @ 2020-03-02 16:18  Alex_Mercer  阅读(323)  评论(0编辑  收藏  举报