我需要从sql server 2008中的bigint列表中随机选择一个数字。 号码列表不会继续
例如:数字列表可能是这样的
1578 1579 1580 1587 1589 1590 1595 1603
感谢Adv。
答案 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但不会获取的行的方法 随着桌子变大,速度会慢得多。