我有一个包含约50,000行的SQL 8 B( I2 m6 H; d ^1 oServer表。我想随机选择大约5,000行。我想到了一种复杂的方法,用“随机数”列创建一个临时表,将我的表复制到该表中,遍历该临时表并用来更新每一行RAND(),然后从该表中选择随机数列 4 w. Y! q4 W" g2 \1 Y7 x4 W本文建议使用该NEWID()功能。这看起来很有希望,但是我看不到如何可靠地选择一定百分比的行。 # |) W& C1 P$ L7 q6 E$ Q有人做过吗?有任何想法吗? - `* G- c8 U0 S3 {* L) S7 t2 q - j$ e4 L! t3 w+ ^1 n解决方案: ! d2 e1 }5 {% k4 b/ k0 Q) A ( U `$ J' L; s1 g6 T, @
6 k- C k+ c. ^, m+ L
1 e+ m: v. F: Y9 q: ^9 b select top 10 percent * from [yourtable] order by newid()& i N6 n' s* y- ]3 s
为了回应有关大型表的“纯垃圾”注释:您可以这样做来提高性能。) M# x; y1 X& }9 l
select * from [yourtable] where [yourPk] in 0 s! C, N! h1 u$ Y$ l$ O9 z) t+ C( n(select top 10 percent [yourPk] from [yourtable] order by newid()) ; K# r+ `, ~+ R1 r4 @$ E& t/ H" h$ M此操作的成本将是对值进行加键扫描,再加上联接成本,在较大的表上选择较小的百分比应该是合理的。