さらに別のオプションとして、私はずっと NEWID()
が好きでした ランダムな順序付け、およびクロス結合により多くの行が非常に効率的に作成されます:
;with cte AS (SELECT 1 n UNION ALL SELECT 1) ,cte2 AS (SELECT TOP 100 ROW_NUMBER() OVER(ORDER BY a.n) n FROM cte a,cte b,cte c,cte d, cte e, cte f, cte g) SELECT TOP 1 n FROM cte2 a WHERE NOT EXISTS (SELECT 1 FROM randomNums b WHERE a.n = b.num) ORDER BY NEWID()
プレ>デモ:SQL フィドル