代码之家  ›  专栏  ›  技术社区  ›  niaher

设置NOCOUNT OFF或返回@@ROWCUNT?

  •  17
  • niaher  · 技术社区  · 15 年前

    我正在Sql Server 2008数据库中创建一个存储过程。我想返回受影响的行数。哪个选项更适合设置NOCOUNT OFF或返回@ROWCOUNT?

    ALTER PROCEDURE [dbo].[MembersActivateAccount]
        @MemberId uniqueidentifier
    AS
    BEGIN
        -- Should I use this?
        SET NOCOUNT OFF;
    
        UPDATE [dbo].Members SET accountActive = 1 WHERE id = @MemberId;
        --Or should I SET NOCOUNT ON and use the following line instead?
        --return @@ROWCOUNT;
    END
    


    经过一番尝试之后,我得出一个结论,即在存储过程中,SET NOCOUNT在默认情况下是关闭的。是否可以在我的数据库中更改此行为?

    5 回复  |  直到 12 年前
        1
  •  25
  •   slugster Joey Cai    9 年前

    使用@@RowCount。它是显式和透明的,完全由您的代码控制,而不是内置行为。

    这个 NOCOUNT ON (Optons>查询执行>SQL Server>高级)。如果这样设置,然后声明 SET NOCOUNT OFF 在存储过程中,本地设置优先。

        2
  •  6
  •   onupdatecascade    15 年前

        3
  •  4
  •   RichardOD    15 年前

    我知道,启用NOCOUNT会使DataAdapter认为存在并发冲突。

    你可以 read about it on MSDN . 如果代码将由DataAdapters使用,那么显然不要使用SETNOCOUNT ON。

    它看起来像SqlCommand also has this behaviour ,我想这就是DataAdapter出现问题的原因(因为在后台它将使用命令对象)。

        4
  •  2
  •   marc_s HarisH Sharma    11 年前

    使用SET NOCOUNT ON/OFF的原因:

    在向任何表中插入行时控制堆栈溢出。 在执行查询或嵌套查询时传递T-Sql消息。 显示或查看最近执行的查询。

        5
  •  -1
  •   Ashutosh    11 年前

    为什么我们使用SET NOCOUNT on/off---

    答:我们可以通过以下步骤来理解这一点

    步骤1:执行查询“从表名中选择前10个*”。

    步骤3:为了克服额外的开销,我们使用SETNOCOUNT ON。如果它处于启用状态,则它将永远不会计算返回的行数,而是播送一条消息命令成功完成。

    步骤4:默认情况下,NOCOUNT是打开的,然后它计算返回的行数,这就是为什么我建议它在创建新过程时应该关闭,以从数据库服务器获得更好的性能。