zoukankan      html  css  js  c++  java
  • 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 的设置是在执行或运行时设置,而不是在分析时设置。

    示例

    下列代码示例导致在含有其他 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

     

  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/conan304/p/1499202.html
Copyright © 2011-2022 走看看