ASh*_*ASh 10 sql count sql-server-2008 sql-server-2012
为了快速检查,我使用了一个查询
select COUNT(*) LargeTable
Run Code Online (Sandbox Code Playgroud)
并惊讶地看到
LargeTable
-----------
1
Run Code Online (Sandbox Code Playgroud)
几秒钟后,我意识到自己犯了错误
select COUNT(*) from LargeTable
Run Code Online (Sandbox Code Playgroud)
得到了预期的结果
(No column name)
-----------
1.000.000+
Run Code Online (Sandbox Code Playgroud)
但现在我不明白为什么要COUNT(*)回来1
如果我做它发生select COUNT(*)或declare @x int = COUNT(*); select @x
另一个案例
declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable
Run Code Online (Sandbox Code Playgroud)
回报
(No column name)
-----------
0
Run Code Online (Sandbox Code Playgroud)
我没有在SQL标准中找到解释(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt,在线源代码在这里给出/sf/answers/626483511/ 1506454)
为什么COUNT(*)返回1?
Mar*_*ith 12
在SQL Server中,SELECT没有FROM子句的操作就像对单个行表操作一样.
这不是标准的SQL.其他RDBMS提供DUAL具有单行的实用程序表.
所以这将被有效地对待
SELECT COUNT(*) AS LargeTable
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
相关的Connect Item讨论
SELECT 'test'
WHERE EXISTS (SELECT *)
Run Code Online (Sandbox Code Playgroud)
是https://connect.microsoft.com/SQLServer/feedback/details/671475/select-test-where-exists-select