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