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

为何WHERE条件不成立时@@ROWCOUNT仍返回1且@b=1?

这个问题其实是SQL Server里聚合查询的一个典型特性,我来给你拆解清楚:

首先先把你的代码贴出来方便分析:

declare @a int, @b int 
select @a=sum(1), @b=1 from syscolumns where 1 = 2 
select @@rowcount, @a, @b

为什么@b=1?

当SELECT语句里包含聚合函数(比如这里的SUM)时,哪怕WHERE条件过滤掉了所有匹配行,SQL Server也不会返回0行,而是会生成一行聚合结果——这一行里,聚合函数的计算结果是NULL,但其他非聚合的赋值(比如@b=1)会正常执行。

简单说,带聚合函数的查询默认会保证至少返回一行,所以@b=1这个赋值会被触发,变量@b就被设置成了1。如果把SUM去掉,改成select @b=1 from syscolumns where 1=2,这时候没有聚合函数,查询返回0行,@b就不会被赋值,会保持初始的NULL状态。

为什么@@ROWCOUNT=1?

@@ROWCOUNT的作用是返回上一个语句实际返回的行数。刚才已经解释了,带SUM的那个SELECT语句返回了1行(聚合后的空结果行),所以@@ROWCOUNT自然就是1。要是没有聚合函数,那个SELECT返回0行,@@ROWCOUNT就会是0。

为什么@a=NULL?

这个你理解的没错,SUM(1)在没有任何行参与计算时,结果就是NULL,所以@a被赋值为NULL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:30:49