You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在完全隔离场景下执行@@ROWCOUNT查询返回结果为1?

问题结论

你猜测的完全正确,SELECT @@ROWCOUNT语句本身确实会触发@@ROWCOUNT的更新,返回1是完全符合官方规则的正常表现。

原因说明

根据微软官方对@@ROWCOUNT的定义,不带业务查询逻辑、仅返回固定值/系统函数/系统变量值的SELECT语句,执行后会自动将@@ROWCOUNT设置为1——这类语句本身会返回1行结果,哪怕结果行的内容是系统变量的值,也符合这个计数规则。

你遇到的测试现象都可以用这个规则解释:

  • 无前置语句直接执行SELECT @@ROWCOUNT时,这个语句本身执行时先将@@ROWCOUNT赋值为1,再返回该值,所以你拿到的结果就是1。
  • 当你执行过其他业务语句(比如未命中任何行的UPDATE)后,@@ROWCOUNT原本会被设为0,但只要你执行了一次读取@@ROWCOUNT的SELECT语句、或者用IF对@@ROWCOUNT做判断,这两个操作本身都会重置@@ROWCOUNT的值,所以后续读取会拿到符合当前操作的计数结果。

实用注意事项

如果需要准确捕获UPDATE、DELETE、INSERT这类业务操作的影响行数,必须紧挨着业务语句用本地变量把@@ROWCOUNT的值存下来,中间不能插入任何其他语句(包括IF判断、其他SELECT查询),否则@@ROWCOUNT会被后续语句重置,拿到错误的计数结果。


内容的提问来源于stack exchange,提问作者EvilDr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:24:04