zoukankan      html  css  js  c++  java
  • XACT_ABORT 用法

    首先创建一张表

    Create Table TranTable
    (
        Id INT IDENTITY(1,1) PRIMARY KEY,
        Priority TINYINT--最大值255
    )

    1.再执行下面的语句:

    set XACT_ABORT ON
      begin tran
          INSERT INTO TranTable  VALUES(1)
          INSERT INTO TranTable VALUES(256)
          INSERT INTO TranTable  VALUES(5)
     commit tran

    出现下面的message:

    (1 row(s) affected)
    Msg 220, Level 16, State 2, Line 4
    Arithmetic overflow error for data type tinyint, value = 256.

    有一条语句出错整个事务回滚,没有问题

    2.当我们设置 set XACT_ABORT OFF

    执行后出现下面的Message

    (1 row(s) affected)

    Msg 220, Level 16, State 2, Line 4 Arithmetic overflow error for data type tinyint, value = 256. The statement has been terminated.

    (1 row(s) affected)

    每条语句都是各自为事务,没有整个事务回滚

    这时候就需要通过捕获异常,回滚事务

    Message 信息:

    (1 row(s) affected)

    (0 row(s) affected)

    整个事务回滚

    3.执行下面的脚本,注意没有 begin tran

    set XACT_ABORT ON

    go
     begin
      INSERT INTO TranTable  VALUES(1)
      INSERT INTO TranTable VALUES(256)
      INSERT INTO TranTable  VALUES(5)
     end

    Message 信息:

    (1 row(s) affected)
    Msg 220, Level 16, State 2, Line 4
    Arithmetic overflow error for data type tinyint, value = 256.

    每个语句作为一个事务,事务在错误行终止,错误行回滚,错误行之前的不回滚

    PS:

    新建一个连接,执行下面的脚本:

      INSERT INTO TranTable  VALUES(1)
      INSERT INTO TranTable VALUES(256)
      INSERT INTO TranTable  VALUES(5)

    发现有插进了两条数据

    如果执行下面的脚本

      INSERT INTO TranTable  VALUES(1)
      select ff from TranTable -- 没有ff这一列
      INSERT INTO TranTable  VALUES(5)

    会发现三条语句作为一个事务,整体回滚

    也许就应了这句话的解释:在事务中,回滚一个语句还是整个事务视错误的严重程序而定,用户级错误一般不会回滚整个事务

    set XACT_ABORT OFF 为默认设置,是否回滚整个事务也是要看错误的级别

  • 相关阅读:
    UNIX环境C
    UINX标准C
    centOS 部署服务器(三)
    centOS 部署服务器(二)
    centOS 部署服务器(一)
    mysql数据库的还原及常见问题解决
    tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法
    mysql 使用service mysqld start 提示未识别服务 进入/etc/rc.d/init.d 下面未发现有mysqld解决方法
    数据库表修复问题
    Ubuntu系统图形化界面无法登录到root用户的解决方法
  • 原文地址:https://www.cnblogs.com/wanglg/p/3809562.html
Copyright © 2011-2022 走看看