Это даст вам случайное число до 12 цифр, с очень небольшим количеством коллизий.
select -convert(bigint, convert(varbinary(max), newid())) % 1000000000000
Вам нужно проверять и игнорировать коллизии, а также сбрасывать числа, число которых заканчивается менее чем на 6цифры.
РЕДАКТИРОВАТЬ
Чтобы сначала использовать самые низкие длины, вы не сможете использовать действительно генератор случайных чисел.Это потому, что как только вы достигнете 95% 6-значного диапазона, коллизии будут настолько велики, что программа будет тратить все свое время, пытаясь и пытаясь получить уникальный номер, который еще не использовался.Как только вы получите только один оставшийся номер, программа может ждать вечно и никогда не «сгенерировать» этот номер.Таким образом, чтобы выполнить «сначала наименьшую длину», вам на самом деле нужно сгенерировать ВСЕ числа в таблицу, а затем случайным образом (order by len(num), newid()
) их номер, а затем последовательно вытянуть их.
Чтобы от 0 до 12цифры, используйте
select right('000000000000'
+right(-convert(bigint, convert(varbinary(max), newid())),12),12)