Bạn có thể sử dụng cte với các mã được tính toán, distinct
và kiểm tra xem Mã đã tồn tại trong bảng của bạn chưa:
;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)
Vì vậy, distinct
giúp bạn tránh va chạm giữa các mã mới và exists
giúp bạn tránh va chạm với các mã hiện có trong [Codes]
bảng và order by newid()
giúp bạn nhận các giá trị ngẫu nhiên từ các mã mới