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

Sql server 2008 如何从数字列表中选择随机数字,sql-server-2008,select,random,Sql Server 2008,Select,Random,我需要从SQLServer2008中的bigint列表中随机选择一个数字。 号码列表无法继续 例如:数字列表可能是这样的 1578 1579 1580 1587 1589 1590 1595 1603年 感谢您的支持。我已成功订购了“按newid选择”的前1名结果() 其他答案不适用于大型表格 这一个可以,并且从SQL2005开始提供 SELECT TOP 1 * FROM <table_name> TABLESAMPLE (10 PERCENT) 从表样本中选择前1*(10%)

我需要从SQLServer2008中的bigint列表中随机选择一个数字。 号码列表无法继续

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

1578 1579 1580 1587 1589 1590 1595 1603年


感谢您的支持。

我已成功订购了“按newid选择”的前1名结果()


其他答案不适用于大型表格

这一个可以,并且从SQL2005开始提供

SELECT TOP 1 * FROM <table_name> TABLESAMPLE (10 PERCENT)
从表样本中选择前1*(10%)
从中的“进一步向下”:

通常,当在中询问有关如何选择随机行的问题时 讨论组,提出了NEWID查询;它简单有效 非常适合小桌子。然而,NEWID查询有一个很大的问题 用于大型桌子时的缺点。ORDERBY子句导致 表中要复制到tempdb数据库中的所有行, 它们被分类的地方。这导致两个问题:

分拣操作通常具有较高的成本。 排序可以使用大量磁盘I/O,并且可以运行很长时间。在 最坏情况下,tempdb可能会耗尽空间。在最好的情况下 在这种情况下,tempdb可能会占用大量的磁盘空间,而这些磁盘空间永远不会被占用 将在不使用手动收缩命令的情况下回收。你需要的是一个 一种随机选择不使用tempdb且无法获取的行的方法 桌子越大,速度越慢


数字列表是否在它自己的表中?请注意,正如引用文章的标题所暗示的,此解决方案不能很好地扩展到大型表。如果您的表很大,本文将继续介绍更好的方法。感谢您的回复,但我想在函数中使用此语句,但由于newid(),我无法使用,并且我的select语句包含带有变量的where子句,因此我无法为此select语句创建视图。或无法创建存储过程…导致SP未从函数调用
SELECT TOP 1 BigIntColumn FROM Table1
ORDER BY NEWID()
SELECT TOP 1 * FROM <table_name> TABLESAMPLE (10 PERCENT)