MSSQL 事务

数据说明

  • insert into Base_User (Code,Name,Password) values('1','1','1'),其中三个字段都是必填的
  • SET XACT_ABORT off和 SET XACT_ABORT on 说明来源:https://blog.csdn.net/Fanbin168/article/details/52235589?utm_source=blogxgwz1

    • 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

猜你喜欢

转载自www.cnblogs.com/Alex-Mercer/p/12396244.html