Sql server SQL每次调用都会获得不同的随机数据

Sql server SQL每次调用都会获得不同的随机数据,sql-server,Sql Server,需要帮助,SQL能做到吗 我有一个有100行的表,我需要从表中随机调用10行。 SQL是否可以在每次查询调用时提供不同的随机数据,而不是之前选择的行 1st random query = get 10 random rows 2nd random query = get another 10 random rows different from the 1st call . . . 10th random query = get the last 10 rows not chosen 我仍在搜

需要帮助,SQL能做到吗

我有一个有100行的表,我需要从表中随机调用10行。 SQL是否可以在每次查询调用时提供不同的随机数据,而不是之前选择的行

1st random query = get 10 random rows
2nd random query = get another 10 random rows different from the 1st call
.
.
.
10th random query = get the last 10 rows not chosen
我仍在搜索,但不知道如何搜索,最后一个选项是每次选择都会更新行,以便在下一次调用中未选中

SELECT TOP 10 [your select list]
FROM [your table]
ORDER BY NEWID()
应该给你10个“随机”行每次调用。 如果您需要100%确保这些行以前未被选中,唯一的方法是标记它们,以便您可以将它们排除在where中或从表中删除它们

编辑以扩展标记方法:
用于标记为已提取的伪代码可能如下所示:

DECLARE @tempList AS TABLE 

INSERT INTO @tempList
SELECT TOP 10 [your select list]
FROM [your table]
WHERE extracted = 0
ORDER BY NEWID()

UPDATE [your table]
SET extracted = 1
WHERE rows IN @tempList

SELECT * FROM @templist

使用此脚本,您只需声明正在执行的运行,每次运行都会给出相同的行,您只需更改@run的值。结果看起来是随机的,但实际上不是随机的:

DECLARE @run INT = 2

DECLARE @t table(id int)
INSERT @t 

SELECT x.id*10 + y.id + 1
FROM (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) x(id)
CROSS JOIN
(values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) y(id)

;WITH CTE as
(
  SELECT id, ntile(10) over (order by reverse(CHECKSUM(id, 'abc'))) rowgroup  FROM @t
)
SELECT id
FROM CTE
WHERE rowgroup = @run

你能像正常的选择输出一样输出10意味着10个数据吗?如果我有100个数据,那么我必须创建100个值?嗯,您的行已经在您的表中了。此语法仅选取10个值。您只需要用表替换@t,用主键列替换id。如果你准备得更好,包括你的表,我本来可以发布一个更好的答案