首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将NOCOUNT设置为OFF还是返回@@ROWCOUNT?

将NOCOUNT设置为OFF还是返回@@ROWCOUNT?
EN

Stack Overflow用户
提问于 2009-06-15 11:23:19
回答 3查看 29.4K关注 0票数 18

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

代码语言:javascript
复制
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在默认情况下是关闭的。有没有可能在我的数据库中改变这个行为?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-15 11:27:46

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

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

票数 25
EN

Stack Overflow用户

发布于 2009-08-26 18:36:52

不要为值使用RETURN。按照惯例,从存储过程返回的是错误代码,0表示没有错误,非0表示存在某种问题。如果需要恢复数据,适当的方法是使用输出参数。基于其他语言对return的使用,这有点违反直觉。

票数 6
EN

Stack Overflow用户

发布于 2009-06-15 11:28:30

我知道将NOCOUNT设置为ON会使DataAdapter认为存在并发冲突。

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

它看起来像命令,我猜这就是DataAdapter有问题的原因(因为在幕后它将使用SqlCommand对象)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/995589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档