@@RowCount return 1 即使之前的 select 条件为 False

@@RowCount return 1 even the previous select condition was False

我有这个简单的代码

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

结果是:@@rowcount=1@a=null@b=1

@a = null 对我来说没问题,但是@@rowcount 和@b=1

怎么会这样呢?

SQLFiddle : https://rextester.com/PKCB94229

这是因为标量聚合(没有 GROUP BY)总是 return 一行,即使输入为空(假设没有 HAVING 子句消除它)

select sum(1) from syscolumns where 1 = 2 return 是一个只有一行的结果集,因此 @@ROWCOUNT 被正确报告为 1

如果您想计算将标量聚合分配给变量的查询的输入行数,那​​么将 COUNT(*) 分配给另一个变量将是最简单的。