我有一个 SQL Server 存储过程(使用 SQL Server 2008 R2),它执行几个不同的表更新。更新行后,我想在审计表中记录信息。
这是我的伪代码:
UPDATE tblName SET flag = 'Y' WHERE flag = 'N'
IF @@ROWCOUNT > 0
BEGIN
INSERT INTO auditTable...etc
END
不幸的是,即使更新了零行,它仍会在审计表中记录该操作。
注意:正在更新的表上没有相关触发器。
任何想法为什么会发生这种情况?
最佳答案
在 T-SQL 中执行的任何语句都会设置 @@rowcount
,甚至是 if
语句,因此一般规则是捕获您感兴趣的语句之后的语句中的值。
所以之后
update table set ....
你要
Select @mycount = @@Rowcount
然后你使用这个值来做你的流量控制或消息。
As the docs state ,即使是简单的变量赋值也会将
@@rowcount
设置为 1。这就是为什么在这种情况下很重要的原因是,如果您希望人们诊断问题,那么您需要提供实际代码,而不是伪代码。
关于sql - @@ROWCOUNT 检查未检测到零行数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24585672/