COUNT(*)返回的行数较少

spp*_*c42 6 sql sql-server ssms sql-server-2012

我有视图,在做的时候返回5167行

SELECT * FROM MY_VIEW -- returns 5167 rows
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做COUNT(*),我得到一个完全不同的数字

SELECT COUNT(*) FROM MY_VIEW -- returns 3112 rows
Run Code Online (Sandbox Code Playgroud)

我已经尝试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
Run Code Online (Sandbox Code Playgroud)

**更新2**

我发现,如果我运行COUNT('column_1'),那么我得到结果3112,但如果我这样做COUNT('any_other_column'),我得到5167!我查了一下,NULL在column_1 中没有 s.此外,COUNT(*)无论如何应该计算NULL,不应该集中在一列,但应该计算行数.因此,未能进一步了解上述任何结果.