我正在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我知道两者都有效,但哪一个是更好的选择?为什么?
经过一些尝试,我得出了一个结论,在存储过程中,SET NOCOUNT在默认情况下是关闭的。有没有可能在我的数据库中改变这个行为?
发布于 2009-06-15 11:27:46
使用@@RowCount。它是明确和透明的,它完全由你的代码控制,而不是内置的行为。
可以手动将NOCOUNT选项设置为默认值ON (Optons>Query Execution>SQL Server>Advanced)。如果以这种方式设置它,然后在存储过程中声明SET NOCOUNT OFF,则本地设置优先。
发布于 2009-08-26 18:36:52
不要为值使用RETURN。按照惯例,从存储过程返回的是错误代码,0表示没有错误,非0表示存在某种问题。如果需要恢复数据,适当的方法是使用输出参数。基于其他语言对return的使用,这有点违反直觉。
发布于 2009-06-15 11:28:30
我知道将NOCOUNT设置为ON会使DataAdapter认为存在并发冲突。
你可以使用read about it on MSDN。如果代码将由DataAdapters使用,那么显然不要使用SET NOCOUNT ON。
它看起来像命令,我猜这就是DataAdapter有问题的原因(因为在幕后它将使用SqlCommand对象)。
https://stackoverflow.com/questions/995589
复制相似问题