这个问题只是为了知识。我没有任何实际的实现。
我发了一个像
这样的查询SELECT RAND() RANDOMCOLUMNS,COL1
FROM tblY
ORDER BY RANDOMCOLUMNS
RANDOMCOLUMNS COL1
================================
0.567773034904758 1
0.567773034904758 2
0.567773034904758 3
0.567773034904758 4
当我使用NEWID()触发相同的查询时,我得到以下输出
RANDOMCOLUMNS COL1
===========================================
B953F9A9-BE22-4651-8669-5CC6A5269911 4
50293D75-4139-4A75-883F-81DAA91ED4E6 1
0A9B1D56-68FD-4060-AA6B-89791DAF8924 3
4C3A2765-4EA2-493B-8AA9-EBA414D7AAC2 2
正如您所看到的,COL1的值顺序已经改变。
问题是为什么以及如何发生的?
据我所知,NEWID()生成唯一的GUID。它是否必须对列排序做任何事情?
提前致谢
答案 0 :(得分:3)
在第一个示例中,您按RANDOMCOLUMNS排序。但由于每行中的值相同,因此订单未被修改。在第二个示例中,您将按每列具有不同值的列进行排序。 SQL Server中的Sorting by GUID is strange,但仍然按该列排序,因为它在您的ORDER BY子句中。
答案 1 :(得分:2)
在两个查询中,Col1输出顺序无关紧要,因为您没有提及它。由于优化器决定从表中读取数据,因此在查询1中按顺序排列Col1只是纯属巧合。
除非使用ORDER BY子句,否则无法保证输出顺序。您没有在Col1上指定任何排序,因此这是标准行为。