如何从数字列表中选择随机数

时间:2012-10-14 05:11:36

标签: sql-server-2008 select random

我需要从sql server 2008中的bigint列表中随机选择一个数字。 号码列表不会继续

例如:数字列表可能是这样的

1578 1579 1580 1587 1589 1590 1595 1603

感谢Adv。

3 个答案:

答案 0 :(得分:2)

我已经成功订购了newid()选择的前1个结果:

select top 1 WhateverId from YourTable order by newid();

答案 1 :(得分:2)

Selecting Rows Randomly from a Large Table

SELECT TOP 1 BigIntColumn FROM Table1
ORDER BY NEWID()

答案 2 :(得分:0)

其他答案无法很好地扩展到大型表格。

这个可以,从SQL2005开始提供。

SELECT TOP 1 * FROM <table_name> TABLESAMPLE (10 PERCENT)

Selecting Rows Randomly from a Large Table中的“进一步向下”:

  

通常,当询问有关如何选择随机行的问题时   讨论组,提出NEWID查询;它很简单而且很有效   非常适合小桌子。但是,NEWID查询有一个很大的问题   将它用于大型表时的缺点。 ORDER BY子句导致   要复制到tempdb数据库中的表中的所有行,   他们在哪里排序。这导致两个问题:

     

分拣操作通常具有与之相关的高成本。   排序可以使用大量磁盘I / O并可以运行很长时间。在里面   在最坏的情况下,tempdb可能会耗尽空间。在最好的情况下   在这种情况下,tempdb可以占用大量永不占用的磁盘空间   将在没有手动收缩命令的情况下回收。你需要的是一个   随机选择不使用tempdb但不会获取的行的方法   随着桌子变大,速度会慢得多。