`

SET XACT_ABORT ON

 
阅读更多
http://bbs.csdn.net/topics/380103077



当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。OFF 是默认设置。

编译错误(如语法错误)不受 SET XACT_ABORT 的影响。



这里OFF是默认设置,换句话说一个存储过程如果开头不写SET XACT_ABORT ON 的话,这个里面如果有一句出错了,其他语句还是照样可以运行的,

那这样是不是违背了事务原理,事务不是原子性,一致性吗?,这样做还有什么意义呢?为什么默认不是ON ,因为用到事务的情况,肯定是希望事务内部语句起到 同生同灭的效果

SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效

SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,用户级错误一般不会回滚整个事务


备注
当 SET XACT_ABORT 为 ON 时,如果执行 Transact-SQL 语句产生运行时错误,则整个事务将终止并回滚。

当 SET XACT_ABORT 为 OFF 时,有时只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。如果错误很严重,那么即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。

编译错误(如语法错误)不受 SET XACT_ABORT 的影响。

对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。有关详细信息,请参阅分布式查询和分布式事务。

SET XACT_ABORT 的设置是在执行或运行时设置,而不是在分析时设置。

示例
下列代码示例导致在含有其他 Transact-SQL 语句的事务中发生外键冲突错误。在第一个语句集中产生错误,但其他语句均成功执行且事务成功提交。在第二个语句集中,将 SET XACT_ABORT 设置为 ON。这导致语句错误使批处理终止,并使事务回滚。


USE AdventureWorks;
GO
IF OBJECT_ID(N't2', N'U') IS NOT NULL
    DROP TABLE t2;
GO
IF OBJECT_ID(N't1', N'U') IS NOT NULL
    DROP TABLE t1;
GO
CREATE TABLE t1
     (a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
     (a INT NOT NULL REFERENCES t1(a));
GO
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
SET XACT_ABORT OFF;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (1);
INSERT INTO t2 VALUES (2); -- Foreign key error.
INSERT INTO t2 VALUES (3);
COMMIT TRANSACTION;
GO
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
INSERT INTO t2 VALUES (4);
INSERT INTO t2 VALUES (5); -- Foreign key error.
INSERT INTO t2 VALUES (6);
COMMIT TRANSACTION;
GO
-- SELECT shows only keys 1 and 3 added.
-- Key 2 insert failed and was rolled back, but
-- XACT_ABORT was OFF and rest of transaction
-- succeeded.
-- Key 5 insert error with XACT_ABORT ON caused
-- all of the second transaction to roll back.
SELECT *
    FROM t2;
GO



语法


SET NOCOUNT { ON | OFF }


备注
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。

即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。

当 SET NOCOUNT 为 ON 时,将不向客户端发送存储过程中每个语句的 DONE_IN_PROC 消息。使用由 SQL Server 2005 提供的实用工具执行查询时,其结果会防止在 Transact-SQL 语句(例如 SELECT、INSERT、UPDATE 和 DELETE)的末尾显示 nn rows affected。

如果存储过程中包含的一些语句并不返回许多实际数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。

权限
要求具有 public 角色的成员身份。

示例
以下示例将禁止显示受影响的行数的消息。


USE AdventureWorks;
GO
SET NOCOUNT OFF;
GO
-- Display the count message.
SELECT TOP(5)LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- SET NOCOUNT to ON to no longer display the count message.
SET NOCOUNT ON;
GO
SELECT TOP(5) LastName
FROM Person.Contact
WHERE LastName LIKE 'A%';
GO
-- Reset SET NOCOUNT to OFF
SET NOCOUNT OFF;
GO
分享到:
评论

相关推荐

    SQLSERVER事务和XACT_ABORT专题

    该PPT详述XACT_ABORT为ON和OFF的情况,讲解事务和批操作的区别

    SQL事务设置SET XACT_ABORT后正确回滚

    SET XACT_ABORT { ON | OFF }  当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。编译错误(如...

    SQL2000 事务回滚问题探讨

    代码如下: create procedure test_tran as set xact_abort on —–用@@error判断,对于严重的错误,系统根本就不会执行随后对@@error的判断,会直接终止执行。所以设置set xact_abort on 是必要的 BEGIN TRANSACTION...

    浅析SQL Server中包含事务的存储过程

    先来看一个概念:  数据库事务(Database Transaction) ,是指作为... Set XACT_ABORT ON; --使用存储过程执行事务需要开启XACT_ABORT参数(默认为OFF)  delete from table1 where name='' --删除数据sql1  begin tra

    浅析SQL存储过程和事务处理

    在数据库编程中,事务是经常需要用到的技术,在.net平台上,事务处理是非常好用的,但是在Sql Server数据库的存储过程中如何使用...BEGIN TRAN — 显示定义并开始一个事务SET XACT_ABORT ON — 表示遇到错误立即回滚 INSERT

    sql2000绿色免安装版

    SQLserver2000绿色版,有了它可以随时在一个没有安装数据库环境的机子上进行数据库操作。

    微软内部资料-SQL性能优化3

    For example, a shared intent lock placed at the table level means that a transaction intends on placing shared (S) locks on pages or rows within that table. Setting an intent lock at the table level ...

    SQL Server事务和并发控制.ppt

    运行时,如果批处理或事务中某个操作违反约束,系统默认只回退到产生错误的语句。通过打开XACT_ABORT开关,可使系统自动回滚产生该错误的当前事务。

    DEC2006-XACT-x86.cab

    DEC2006_XACT_x86.cab

    DEC2006-XACT-x64.cab

    DEC2006_XACT_x64.cab

    DX9.0c_X86_最终版(网吧装上这个游戏基本没问题的了)

    DX9.0c_X86_最终版(网吧装上这个游戏基本没问题的了)

    SQLserver存储过程异常处理.txt

    SQLserver存储过程异常处理

    pg-monitor-sql:PostrgreSQL 监控查询

    xact_commit, xact_rollback, blks_read, blks_hit, blks_hit::float / ( blks_hit + blks_read ) * 100.0 as cache_hit_ratio, tup_fetched, tup_returned, tup_inserted, tup_updated, tup_deleted FROM...

    导入Microsoft分布式事务处理协调器MSDTC失败的解决方案

    大家跨服务器加事务的时候经常遇到以下报错:导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低...

    IP-XACT standard

    IP-XACT作为IC领域IP专业化及SOC的广泛应用开发,即将成为基础标准

    xAct:此存储库构建用于培训Wolfram Mathematica,xAct中最重要的GR软件包之一

    我将简要解释一下xAct实际上是什么,如何在自己的PC上安装xAct,xAct中最重要的软件包和... 安装 视窗 复制我上传的文件夹xAct 在您的用户目录中, C:\Users\"YourUserName"\AppData\Roaming\Mathematica\...

    sql2000 Log Explorer4.2(含注册码)+汉化

    介绍 Log Explorer主要用于对...XACT_CKPT 在执行检查点时打开事务 END_CKPT 执行完检查点 SORT_BEGIN 创建索引时执行排序 SORT_END 创建索引时排序完成 CREATE_INDEX 创建一个索引 DROP_INDEX 删除一个索引

    IEEE 1685-2009 (IP-XACT 2009)

    IEEE 1685-2009 IEEE Standard For IP-XACT, Standard Structure For Packaging, Integrating, And Reusing IP Within Tool Flows IEEE标准,提供芯片工具流程打包,整合,和IP复用

    xPrint:xAct的xPrint

    最先进的调色板接口与Mathematica软件包的xAct套件 通过下拉菜单选择流形,张量,索引和导数运算符 实时所见即所得张量对象构造 VBundle约束的菜单驱动的索引选择 摘要和b和c索引 即时语法检查 一键式将格式化的...

    IEEE Std 1685-2014 IP-XACT

    IEEE Std 1685-2014 IP-XACT, Standard Structure for Packaging, Integrating, and Reusing IP within Tool Flows -完整英文电子版(508页)

Global site tag (gtag.js) - Google Analytics