SET XACT_ABORT 与 SET NOCOUNT的语法

语法
SET XACT_ABORT { ON | 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 的设置是在执行或运行时设置,而不是在分析时设置。

xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" 2003 authoring ddue.schemas.microsoft.com 5:sections>

示例

xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" 2003 authoring ddue.schemas.microsoft.com 5:content>

下列代码示例导致在含有其他 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 角色的成员身份。

示例

xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" 2003 authoring ddue.schemas.microsoft.com 5:content>

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

 

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

 

2003 authoring ddue.schemas.microsoft.com 5:content>
2003 authoring ddue.schemas.microsoft.com 5:sections>

转载于:https://www.cnblogs.com/conan304/archive/2009/06/08/1499202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值