@@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(*)
分配给另一个变量将是最简单的。
我有这个简单的代码
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(*)
分配给另一个变量将是最简单的。