有没有一种简洁的方法可以从sql server表中检索随机记录?
我想随机化我的单元测试数据,所以我正在寻找一种简单的方法来从一个表中选择一个随机的id。在英语中,select应该是“从表中选择一个id,其中id是表中最低id和最高id之间的随机数”。
如果不运行查询,测试null值,然后重新运行if null,我想不出一种方法来做这件事。
想法?
发布于 2012-08-26 18:24:28
在较大的表中,您也可以使用TABLESAMPLE
来避免扫描整个表。
SELECT TOP 1 *
FROM YourTable
TABLESAMPLE (1000 ROWS)
ORDER BY NEWID()
ORDER BY NEWID
仍然是必需的,以避免只返回首先出现在数据页上的行。
对于表的大小和定义,需要仔细选择要使用的数字,如果没有返回任何行,则可以考虑重试逻辑。这背后的数学原理以及为什么这项技术不适合小表格的原因是discussed here
发布于 2008-10-10 14:13:06
还可以尝试使用您的方法来获取MIN( Id )和MAX(Id)之间的随机Id,然后
SELECT TOP 1 * FROM table WHERE Id >= @yourrandomid
它总是会让你排成一行。
发布于 2013-12-16 16:33:56
如果你想选择大数据,我知道的最好的方法是:
SELECT * FROM Table1
WHERE (ABS(CAST(
(BINARY_CHECKSUM
(keycol1, NEWID())) as int))
% 100) < 10
来源:MSDN
https://stackoverflow.com/questions/191342
复制相似问题