Вы можете использовать запрос CTE для каждого целого числа от 1 до 100.
WITH IntegerRangeCTE([i]) AS
(
SELECT
1 AS [i]
UNION ALL
SELECT
[i] + 1
FROM
IntegerRangeCTE
WHERE [i] < 100
)
SELECT * FROM IntegerRangeCTE
Для дат в интервале с 2010-01-01 по 2010-12-31 вы можете использовать это.
WITH DateRangeCTE([d]) AS
(
SELECT
CONVERT(DATETIME, '2010-01-01') AS [d]
UNION ALL
SELECT
DATEADD(m, 1, [d]) AS [d]
FROM
DateRangeCTE
WHERE [d] < DATEADD(m, -1, CONVERT(DATETIME, '2010-12-31'))
)
SELECT * FROM DateRangeCTE
Если вы получаете сообщение "Оператор завершен. Максимальная рекурсия N была исчерпана до завершения оператора." , используйте подсказку запроса MAXRECURSION .