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

Générer une liste de nouveaux nombres aléatoires uniques dans T-SQL

Vous pouvez utiliser cte avec des codes calculés, distinct et vérifiez si le Code existe déjà dans votre table :

;with cte_stream as (
    select
        floor(cast(crypt_gen_random(4) as bigint) / 4294967296 * ((@max - @min) + 1)) + @min as Code
    from sys.all_objects as s1 
        cross join sys.all_objects as s2;
)
insert into [Codes]
select distinct top (@n) s.Code
from cte_stream as s
where not exists (select * from [Codes] as c where c.Code = s.Code)

Donc distinct vous aide à éviter les collisions entre les nouveaux codes et exists vous aider à éviter les collisions avec des codes déjà existants dans les [Codes] table, et order by newid() vous aide à obtenir des valeurs aléatoires à partir de nouveaux codes