SET XACT_ABORT各种用法及显示结果

简介:

默认行为

  默认为SET XACT_ABORT OFF,没有事务行为。

SET XACT_ABORT ON

  SET XACT_ABORT ON分为两种:

  1、总体作为一个事务,整体提交或整体回滚,格式为:

SET XACT_ABORT ON
BEGIN TRAN
--要执行的语句
COMMIT TRAN
GO

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

SET XACT_ABORT ON
BEGIN
--要执行的语句
END
GO

测试

--创建测试表
use MyDB
CREATE TABLE student
(
stuid int NOT NULL PRIMARY KEY,
stuname varchar(50)
)
CREATE TABLE score
(
stuid int NOT NULL REFERENCES student(stuid),
score int
)
GO

--插入测试数据
INSERT INTO student VALUES (101,'zhangsan')
INSERT INTO student VALUES (102,'wangwu')
INSERT INTO student VALUES (103,'lishi')
INSERT INTO student VALUES (104,'maliu')
GO

---------------测试事务提交------------------
use MyDB
--只回滚错误行,语句还继续执行
SET XACT_ABORT OFF
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
COMMIT TRAN
GO
/*
stuid score
----------- -----------
101 90
102 78
103 81
104 65

(4 row(s) affected)
*/

use MyDB
--事务终止并全部回滚
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
COMMIT TRAN
GO
/*
stuid score
----------- -----------
(0 row(s) affected)
*/

use MyDB
--事务在错误行终止,错误行回滚,错误行之前的不回滚
SET XACT_ABORT ON
BEGIN
INSERT INTO score VALUES (101,90)
INSERT INTO score VALUES (102,78)
INSERT INTO score VALUES (107,76) /* Foreign Key Error */
INSERT INTO score VALUES (103,81)
INSERT INTO score VALUES (104,65)
END
GO
/*
stuid score
----------- -----------
101 90
102 78
(2 row(s) affected)
*/



本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
存储 前端开发 对象存储
一文搞懂Map与Set的用法和区别!
前言 作为前端开发人员,我们最常用的一些数据结构就是 Object、Array 之类的,毕竟它们使用起来非常的方便。往往有些刚入门的同学都会忽视 Set 和 Map 这两种数据结构的存在,因为能用 set 和 map 实现的,基本上也可以使用对象或数组实现,而且还更简单。 但是,存在必然合理,当你真正了解 Map 和 Set 之后,你就会发现它们原来时如此美好!
2120 0
一文搞懂Map与Set的用法和区别!
|
2月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
2月前
|
索引 Python
Pandas中的时间序列利器:set_index用法
Pandas中的时间序列利器:set_index用法
70 0
|
4月前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
584 2
mysql中find_in_set()函数用法详解及增强函数
|
5月前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
222 2
|
6月前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
vb窗体实例化与set语句的用法
vb窗体实例化与set语句的用法
|
6月前
|
C++
stl中set、map的用法
stl中set、map的用法
|
存储 C++ 容器
C++ 第九节——map/set(用法+底层原理+模拟实现)
们需要知道的是,Map和Set的底层都是红黑树。
817 1
C++ 第九节——map/set(用法+底层原理+模拟实现)
|
存储 C++ 容器
C++中set的用法学习
Set是C++ STL(标准模板库)的一个容器类,它用于存储不同的值,并且可以按照特定顺序进行访问和操作。Set是一种基于红黑树实现的关联容器,也就是说它的元素按照固定的顺序排列,且每个元素都唯一。 Set中包含的元素是自动排序的,因此,如果你需要在存储值的同时能够高效的进行查找,那么Set会是一个很好的选择。
244 0