添加Row_number到外部查询。试试这个
SELECt Row_number()OVER(ORDER BY (SELECT NULL)),*FROM (SELECt TOP 3 MyId FROM MyTable ORDER BY Newid()) a
在逻辑上,TOP关键字在之后处理Select。在生成行号后,将随机提取3条记录。因此,您不应在原始查询中生成行号
更新
这可以通过实现CROSS APPLY。用表中的where有效列名替换cross apply子句中的列名Person
SELECT *FROM Person p CROSS apply (SELECt Row_number()OVER(ORDER BY (SELECT NULL)) rn,* FROM (SELECt TOP 3 MyId FROM MyTable WHERe p.some_col = p.some_col -- Replace it with some column from person table ORDER BY Newid())a) cs



