我在SQL Server中遇到一个奇怪的错误,我想要一些解释.
例如,当我ORDER BY在子查询中写字时
SELECT a FROM (SELECT * FROM A ORDER BY a) T
Run Code Online (Sandbox Code Playgroud)
它会引发以下错误
除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
但是当我TOP在子查询中使用时,它正常工作
SELECT a
FROM
(SELECT TOP 1000000 * FROM A ORDER BY a) T
Run Code Online (Sandbox Code Playgroud)
那么,这是否意味着我可以选择A的顶行数,而不是
SELECT a FROM (SELECT * FROM A ORDER BY a) T
Run Code Online (Sandbox Code Playgroud)
在这种情况下.错误的原因是什么?
对子查询进行排序并从中选择某些内容没有多大意义 - 不能保证顶级选择将被排序,因此 - 对内部查询进行排序是没有意义的
但是,如果您使用TOP语句对内部查询进行排序 - 它也不能保证顶级选择将以这种方式排序,但它将仅包含内部查询中的前 X 行 - 这已经是有意义的。
| 归档时间: |
|
| 查看次数: |
9786 次 |
| 最近记录: |