例如考虑SQL查询:
SELECT
A.[Name],
ROW_NUMBER() OVER(ORDER BY A.[Name] ASC)
FROM
[FooTable] AS A
在这里,我观察到返回的结果按A. [名称]排序。如果我将ROW_NUMBER函数中定义的排序列更改为另一列,那么结果将再次由该列进行排序。
我期望将行号分配给这些行,但是我不希望这些行以相同的标准返回排序。这仅仅是查询执行方式的副作用(就我而言,在SQL Server 2008 R2上)还是可以保证这种行为?(我找不到关于这种保证的参考)。
10
从来没有任何保证。曾经 除非您告诉SQL Server如何订购某些东西,否则可以随意以任意顺序返回数据。通过省略顺序,您是在告诉SQL Server您不在乎该顺序。如果您想要保证,只需输入ORDER BY子句即可。
—
亚伦·伯特兰
有一个很好的理由要问,因为有问题的order-by子句非常复杂,因此复制既会造成代码维护混乱,又会增加将来出现缺陷的可能性。另一个选择是较小的重构,我认为如果SQL标准定义了隐式排序顺序,我也许可以避免。无论如何,我只是想知道是否有涉及这一点的正式文档。
—
redcalx 2012年
那为什么不问这个问题呢?
—
亚伦·伯特兰