SQL Server 中雖然有 ORDER BY NewID() 方法,但對於數據量比較大的結果集來說,排序那慢的可不是一星半點。
微軟官方給了一種方案,https://msdn.microsoft.com/en-us/library/cc441928.aspx
示例如下:
SELECT TOP 100 * FROM [01_SubjectiveScoreInfo] WHERE (ABS(CAST((BINARY_CHECKSUM(ID, NEWID()) ) AS INT)) % 100 ) < 1
但此方法仍我缺陷,即無法對所有記錄進行排序,上例中如果總記錄數小於10000,TOP 100 返回的記錄數就會不足100 。