子查询中的SQL Server ORDER BY子句

时间:2011-12-26 08:14:46

标签: sql sql-server

我在SQL Server中遇到一个奇怪的错误,我想要一些解释。

当我在子查询中编写ORDER BY时,例如

SELECT a FROM (SELECT * FROM A ORDER BY a) T

它会抛出以下错误

  

ORDER BY子句在视图,内联函数中派生无效   表,子查询和公用表表达式,除非TOP或FOR   还指定了XML。

但是当我在子查询中使用TOP时,它正常工作

 SELECT a 
 FROM
    (SELECT TOP 1000000 * FROM A ORDER BY a) T

那么,这是否意味着我可以选择A的顶行计数,而不是

SELECT a FROM (SELECT * FROM A ORDER BY a) T

在那种情况下。错误的原因是什么?

1 个答案:

答案 0 :(得分:4)

对子查询进行排序没有太大意义,之后从中选择一些东西 - 不保证顶级选择将被排序,所以 - 没有意义来排序内部查询

但是如果你用TOP语句命令内部查询 - 它也不能保证顶层选择将以这种方式排序,但它只包含来自内部查询的前X行 - 这已经是感。