在存储过程中将sql查询的结果排序为随机顺序的最佳方法是什么?
这是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.