SET NOCOUNT OFF或RETURN @@ ROWCOUNT?

nia*_*her 17 sql t-sql sql-server rowcount nocount

我在Sql Server 2008数据库中创建存储过程.我想返回受影响的行数.哪个是更好的选择SET NOCOUNT OFF或RETURN @@ 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
Run Code Online (Sandbox Code Playgroud)

我知道两者都有效,但这是一个更好的选择,为什么?


经过一番尝试后,我得出的结论是,在存储过程中,SET NOCOUNT默认为OFF.是否可以在我的数据库中更改此行为?

CJM*_*CJM 24

使用@@ RowCount.它是明确且透明的,完全由您的代码控制而不是内置行为.

NOCOUNT选项可以手动设置为默认值ON(Optons> Query Execution> SQL Server> Advanced).如果以这种方式设置,但随后SET NOCOUNT OFF在存储过程中声明,则该本地设置优先.


onu*_*ade 5

不要将RETURN用于值.按照惯例,来自存储过程的RETURN用于错误代码,0表示没有错误,非0表示某种问题.如果需要返回数据,则使用OUTPUT参数的相应方法.基于其他语言对回归的使用,这有点违反直觉.