COUNT(*)返回较少的行数

时间:2018-07-16 12:48:42

标签: sql sql-server sql-server-2012 ssms

我的观点是这样做时会返回5167行

SELECT * FROM MY_VIEW -- returns 5167 rows

但是,如果我对此执行COUNT(*),则会得到一个完全不同的数字

SELECT COUNT(*) FROM MY_VIEW -- returns 3112 rows

我已经尝试过EXEC sp_refreshview 'MY_VIEW',但仍然保持高于结果的水平。

我认为COUNT(*)应该返回完整的行数(不对任何空内容进行过滤,因为没有为列执行该内容,因此应该匹配使用SELECT *

那为什么可能有所不同?

我正在使用SQL Server 2012

** 根据评论更新更多信息 **

按照评论中的说明进行了以下操作

  • 我修改了该命令以反映服务器名称和数据库名称。
  • 确认它们正在同一SSMS选项卡中运行。
  • 在查询中添加了架构名称'dbo.MY_VIEW'
  • 跑'sp_updatestats'

因此在“ SSMS”标签中运行的查询是-

select @@SERVERNAME, DB_NAME(), count(*) from dbo.MY_VIEW; 
-- returns 3112

select @@SERVERNAME, DB_NAME(), * from dbo.MY_VIEW; 
-- returns 5167 rows in results

select @@SERVERNAME, DB_NAME(), *, COUNT(*) over () cnt FROM dbo.MY_VIEW; 
-- returns 5167 rows in results and 5167 as the count

** 更新2 **

我发现如果我运行COUNT('column_1'),则得到结果3112,但是如果我运行COUNT('any_other_column'),则得到5167!我检查了一下,在列_1中没有NULL。同样,COUNT(*)无论如何都应该计算NULL,并且不应该集中在列上,而应该计算行数。因此,无法进一步了解以上任何结果。

0 个答案:

没有答案