Изберете несъхранени стойности с VALUES
ключова дума. След това използвайте JOIN
s за генериране на много и много комбинации (може да бъде разширено за създаване на стотици хиляди редове и повече).
Кратка и бърза версия (не е толкова лесна за четене):
WITH x AS (SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n))
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM x ones, x tens, x hundreds, x thousands
ORDER BY 1
Демо
По-подробна версия:
SELECT ones.n + 10*tens.n + 100*hundreds.n + 1000*thousands.n
FROM (VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) ones(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) tens(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) hundreds(n),
(VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) thousands(n)
ORDER BY 1
Демо
И двете версии могат лесно да бъдат разширени с WHERE
клауза, ограничаваща изхода на числа до определен от потребителя диапазон. Ако искате да го използвате повторно, можете да дефинирате функция с таблична стойност за него.