在尝试生成种子随机排序时,我注意到了这个问题,现在在 SQL Server 2008 R2 (RTM) 和SEDE上都复制了,即 SQL Server 2012 (SP1):
当您ORDER BY
使用VarBinary
子SELECT
字段时,不会发生排序。
在(上述 SEDE 的)查询计划中,您可以看到没有 SORT 用于:
SELECT [id]
,y.x As ryx
,RAND(y.x) As yx
FROM #Test, (SELECT CONVERT(varbinary, NEWID()) As x) y
ORDER BY ryx
就像我尝试过的所有其他变体一样(您可以在 SEDE 查询中看到它们,也可以将它们编辑为ORDER BY yx
)。
我查看了MSDN并且仅在索引时确认VarBinary
使用MACHINE 排序规则。
这只是一个错误还是一个记录不充分的功能?:-)