在 SQL Server 2005 中,是否有一种方法可以删除行并被告知“实际”删除了多少行? 我可以在相同的条件下做一个
select count(*)
,但我需要它完全值得信赖。
我的第一个猜测是使用
@@ROWCOUNT
变量 - 但这尚未设置,例如
delete
from mytable
where datefield = '5-Oct-2008'
select @@ROWCOUNT
始终返回 0。
MSDN 建议采用
结构,例如
delete from mytable
where datefield = '5-Oct-2008'
output datefield into #doomed
select count(*)
from #doomed
这实际上因语法错误而失败。
有什么想法吗?
SET NOCOUNT OFF
?
SET NOCOUNT off ;
SELECT @p1 = @@ROWCOUNT
其中p1是您在存储过程中设置的输出参数。 希望有帮助。
@@ROWCOUNT
应该可以工作 - 这是找出已删除行数的正确方法。如果您尝试从应用程序中删除某些内容,那么您需要使用
SET NOCOUNT ON
根据 MSDN
即使 SET NOCOUNT 为 ON,@@ROWCOUNT 函数也会更新,因为 SET NOCOUNT
只影响执行后收到的消息。
因此,如果您尝试使用来自 ADO.NET 等的
@@ROWCOUNT
的结果,那么
SET NOCOUNT ON
肯定会有所帮助。@@rowcount
的情况,例如当您想知道已删除值的不同计数而不是总数时。在这种情况下,您必须执行以下操作:
delete from mytable
where datefield = '5-Oct-2008'
output deleted.datefield into #doomed
select count(distinct datefield)
from #doomed
OP中的语法错误是因为
output
在
deleted
字段名称之前没有包含datefield
。插入临时表,选择要删除的 ID。这给了你你的计数。
从 id 所在的表中删除(从临时表中选择 id)