SQL Server随机sorting
什么是在存储过程中将SQL查询的结果sorting为随机顺序的最佳方法?
这是SO#19412的重复。 这是我在那里给出的答案:
select top 1 * from mytable order by newid()
在SQL Server 2005及更高版本中,您可以使用TABLESAMPLE获取可重复的随机样本:
SELECT FirstName, LastName FROM Contact TABLESAMPLE (1 ROWS) ;
select foo from Bar order by newid()
或者使用下面的查询,返回一个更好的随机样本结果:
SELECT * FROM a_table WHERE 0.01 >= CAST(CHECKSUM(NEWID(), a_column) & 0x7fffffff AS float) / CAST (0x7fffffff AS int)
0.01意味着总行数的1%。
从SQL 2008联机丛书引用:
如果您确实需要单个行的随机样本,请修改您的查询以随机筛选出行,而不是使用TABLESAMPLE。
正如你所知道的,你不能只按ORDER BY RAND(),因为它只会产生一个值。 所以使用一个关键的种子值。
SELECT RAND(object_id),object_id,name FROM sys.objects ORDER BY 1