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

     

  • 相关阅读:
    Android学习第三天
    Android学习第二天(从零开始手动创建项目)
    【k8s】Pod-containers
    【k8s】Pod-Guaranteed
    【k8s】Pod-Burstable
    【k8s】Pod-BestEffort
    【k8s】Pod-qosClass
    【k8s】Pod-readinessGates
    【k8s】Pod-containerStatuses
    【k8s】Pod-conditions
  • 原文地址:https://www.cnblogs.com/conan304/p/1499202.html
Copyright © 2011-2022 走看看