首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自数据库表的随机记录(T-SQL)

来自数据库表的随机记录(T-SQL)
EN

Stack Overflow用户
提问于 2008-10-10 13:45:45
回答 4查看 61.1K关注 0票数 93

有没有一种简洁的方法可以从sql server表中检索随机记录?

我想随机化我的单元测试数据,所以我正在寻找一种简单的方法来从一个表中选择一个随机的id。在英语中,select应该是“从表中选择一个id,其中id是表中最低id和最高id之间的随机数”。

如果不运行查询,测试null值,然后重新运行if null,我想不出一种方法来做这件事。

想法?

EN

回答 4

Stack Overflow用户

发布于 2012-08-26 18:24:28

在较大的表中,您也可以使用TABLESAMPLE来避免扫描整个表。

代码语言:javascript
复制
SELECT  TOP 1 *
FROM YourTable
TABLESAMPLE (1000 ROWS)
ORDER BY NEWID()

ORDER BY NEWID仍然是必需的,以避免只返回首先出现在数据页上的行。

对于表的大小和定义,需要仔细选择要使用的数字,如果没有返回任何行,则可以考虑重试逻辑。这背后的数学原理以及为什么这项技术不适合小表格的原因是discussed here

票数 28
EN

Stack Overflow用户

发布于 2008-10-10 14:13:06

还可以尝试使用您的方法来获取MIN( Id )和MAX(Id)之间的随机Id,然后

代码语言:javascript
复制
SELECT TOP 1 * FROM table WHERE Id >= @yourrandomid

它总是会让你排成一行。

票数 10
EN

Stack Overflow用户

发布于 2013-12-16 16:33:56

如果你想选择大数据,我知道的最好的方法是:

代码语言:javascript
复制
SELECT * FROM Table1
WHERE (ABS(CAST(
    (BINARY_CHECKSUM
    (keycol1, NEWID())) as int))
    % 100) < 10

来源:MSDN

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/191342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档