4

我需要从 sql server 2008 的 bigint 列表中随机选择一个数字。数字列表没有继续

例如:号码列表可能是这样的

1578 1579 1580 1587 1589 1590 1595 1603

感谢进阶。

4

3 回答 3

4

我已经成功地通过 newid() 排序了选择的前 1 个结果:

select top 1 WhateverId from YourTable order by newid();
于 2012-10-14T05:17:43.257 回答
2

从大表中随机选择行

SELECT TOP 1 BigIntColumn FROM Table1
ORDER BY NEWID()
于 2012-10-14T05:18:40.307 回答
0

其他答案不能很好地扩展到大表。

这个可以,并且可以从 SQL2005 开始使用。

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

从“从大表中随机选择行”中的“进一步向下” :

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

排序操作通常具有与之相关的高成本。排序可以使用大量的磁盘 I/O,并且可以运行很长时间。在最坏的情况下,tempdb 可能会耗尽空间。在最好的情况下,tempdb 会占用大量磁盘空间,如果没有手动收缩命令,这些空间永远不会被回收。您需要的是一种随机选择行的方法,该方法不会使用 tempdb,并且不会随着表变大而变慢。

于 2012-10-14T05:25:06.687 回答