我在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
在那种情况下。错误的原因是什么?
答案 0 :(得分:4)
对子查询进行排序没有太大意义,之后从中选择一些东西 - 不保证顶级选择将被排序,所以 - 没有意义来排序内部查询
但是如果你用TOP
语句命令内部查询 - 它也不能保证顶层选择将以这种方式排序,但它只包含来自内部查询的前X行 - 这已经是感。