Warm tip: This article is reproduced from serverfault.com, please click

sql-@@ RowCount返回1,即使先前的选择条件为False

(sql - @@RowCount return 1 even the previous select condition was False)

发布于 2020-11-28 23:58:50

我有这个简单的代码

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

Questioner
EagerToLearn
Viewed
11
Martin Smith 2020-11-29 08:19:23

这是因为标量聚合(no GROUP BY)即使在输入为空时也总是返回一行(假设noHAVING子句消除了该行)

select sum(1) from syscolumns where 1 = 2返回一行结果集,因此@@ROWCOUNT正确地报告为1

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