在SQL Server 2005中,是否有一种删除行并被告知实际删除了多少行的方法?
我可以select count(*)
用相同的条件做一件事,但我需要这完全值得信赖.
我的第一个猜测是使用@@ROWCOUNT
变量 - 但是没有设置,例如
delete from mytable where datefield = '5-Oct-2008' select @@ROWCOUNT
总是返回0.
MSDN建议OUTPUT
构建,例如
delete from mytable where datefield = '5-Oct-2008' output datefield into #doomed select count(*) from #doomed
这实际上失败了,语法错误.
有任何想法吗?
你试过SET NOCOUNT OFF
吗?
我在SQL2000中使用@@ ROWCOUNT这个确切的目的没有问题.确保在检查之前不会无意中重置此计数(BOL:'此变量由任何不返回行的语句设置为0,例如IF语句').
这样做:
SET NOCOUNT off ; SELECT @p1 = @@ROWCOUNT
其中p1是您在存储过程中设置的输出参数.希望能帮助到你.
在您的示例中@@ROWCOUNT
应该可以工作-这是找出许多已删除行的正确方法。如果您尝试从应用程序中删除某些内容,则需要使用SET NOCOUNT ON
根据MSDN,即使SET NOCOUNT设置为ON,也会更新@@ ROWCOUNT函数,因为这SET NOCOUNT
只会影响执行后获得的消息。
因此,如果您尝试使用@@ROWCOUNT
ADO.NET 的结果,则SET NOCOUNT ON
绝对可以提供帮助。