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选项卡中运行的查询是 -
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,不应该集中在一列,但应该计算行数.因此,未能进一步了解上述任何结果.