我的观点是这样做时会返回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”标签中运行的查询是-
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,并且不应该集中在列上,而应该计算行数。因此,无法进一步了解以上任何结果。