@ Микаэль Эрикссон уже упоминал таблицу номеров / счетную таблицу (ищите ее в Интернете, существует множество возможных вариантов использования, многие администраторы баз данных всегда хотят, чтобы таблица учета была представлена в любой системе, которой они управляют)
IЯ просто хотел поделиться одним нерекурсивным решением «Tally Table» на основе CTE, которое я видел на днях, и которое, я думаю, удивительно элегантно благодаря своему огромному диапазону (4 тысячи миллионов логических строк) и общей применимости без каких-либо зависимостей от базы данных:
WITH
E00(N) AS (SELECT 1 UNION ALL SELECT 1),
E02(N) AS (SELECT 1 FROM E00 a, E00 b),
E04(N) AS (SELECT 1 FROM E02 a, E02 b),
E08(N) AS (SELECT 1 FROM E04 a, E04 b),
E16(N) AS (SELECT 1 FROM E08 a, E08 b),
E32(N) AS (SELECT 1 FROM E16 a, E16 b),
cteTally(N) AS (SELECT ROW_NUMBER() OVER (ORDER BY N) FROM E32)
SELECT *
FROM cteTally
WHERE N >= 2500
AND N <= 2700
AND N % 10 = 0
Я нашел это здесь , но я не знаю, является ли это исходным источником этого CTE.
Приятно, что вы этого не делаетеНе нужно беспокоиться о минимальном, максимальном или размере шага, и все же он работает очень хорошо в большинстве (разовых) ситуаций.Тем не менее, он не должен использоваться в каких-либо часто называемых бизнес-процессах;Любая таблица с физическими индексированными числами всегда будет работать лучше!
РЕДАКТИРОВАТЬ: я просто немного больше искал источник этого метода (я пропустил ссылку на stackoverflow в статье, на которую я ссылался), и, по-видимому, первоначально она была приписанаИцик Бен-Ган, из нижней части страницы 255 в книге под названием «Внутри Microsoft SQL Server 2005 - T-SQL Querying» ( говорит Джефф Моден , которому я безоговорочно доверяю).