首先创建一张表

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 为默认设置,是否回滚整个事务也是要看错误的级别

XACT_ABORT 用法的更多相关文章

  1. Sql Server 常用事务处理总结

    在数据库操作中,常用事务写法: 1. 通过 @@error 判断一批sql 执行完毕,是否有异常.  @@error 为系统变量,每次执行完 sql 都会返回一个数值,  0 表示 执行成功 ,非0 ...

  2. SQL Server 中的SET XACT_ABORT各种用法及显示结果

      源地址:http://www.cnblogs.com/rob0121/articles/2320932.html 点击进入 默认行为:默认为SET XACT_ABORT OFF,没有事务行为. S ...

  3. SET XACT_ABORT 的用法[转]

    SET XACT_ABORT指定当 Transact-SQL 语句产生运行时错误时,Microsoft® SQL Server™ 是否自动回滚当前事务. 语法 SET XACT_ABORT { ON ...

  4. 数据库事物用法 SET XACT_ABORT ON

    数据库事物的用法和作用就不再重复,写一下在实战当中遇到的问题,代码如下: begin tran --开始执行事务     --语句一 update  set acount = acount-100 w ...

  5. sql事务(Transaction)用法介绍及回滚实例

    sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务, S ...

  6. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  7. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  8. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  9. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

随机推荐

  1. JavaScript 字符串和日期内容整理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JavaScript数字精度上代码。

    /**不能超过 9007199254740992 * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差), ...

  3. C- struct的使用

    数组是二等公民,不能进行整体赋值,或者参数传递,或者作为返回值. But!如果封装在struct内部,就完全不一样了 #include <iostream> using namespace ...

  4. POJ 3207 2-sat

    题目大意: 在圆上顺时针n个点,给定m个连接,可以通过圆内或者圆外相交,问能不能找到一种方式,使这些连接的边都不相交 这里很容易看出的是,这些边只有在圆外或者圆内两种连接方式,而且必须选择其中一种 所 ...

  5. Section 1.4 Packing Rectangles

    本来是USACO Training的1.4.1的,但是介于今早过了食物链想起了这道题实在是太怨念了,翻出自己写的AC程序居然有5KB!! 思路很简单,枚举,而且就图中的六种情况.但是第六种变化状况太多 ...

  6. Program C--二分

    My birthday is coming up and traditionally I’m serving pie. Not just one pie, no, I have a number N ...

  7. hdu 1030 Delta-wave (C++, 0ms, explanatory comments.) 分类: hdoj 2015-06-15 12:21 45人阅读 评论(0) 收藏

    problem description http://acm.hdu.edu.cn/showproblem.php?pid=1030 #include <cstdio> #include ...

  8. SharePoint 2013 开发——CSOM概要

    博客地址:http://blog.csdn.net/FoxDave 本篇对客户端API做一个大致地了解. 看一下各个类别主要API之间的对应关系表. 假设我们对Server API已经有了足够地了 ...

  9. C++ primer的第二章的主要内容

    这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...

  10. ZOJ 1654 - Place the Robots (二分图最大匹配)

    题意:在一个m*n的地图上,有空地,草和墙,其中空地和草能穿透攻击光线,而墙不能.每个机器人能够上下左右攻击,问在地图上最多能放多少个不互相攻击的机器人. 这个题和HDU 1045 -  Fire N ...