Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Générer un nombre aléatoire qui n'est pas là dans une table du serveur sql

Encore une autre option, j'ai toujours aimé NEWID() pour un ordre aléatoire, et les jointures croisées créent de nombreuses lignes très efficacement :

;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()

Démo :SQL Fiddle