Использование ROW_NUMBER
в любом столбце из любой достаточно большой (стабильной) таблицы будет одним из способов сделать это.
SELECT *
FROM (
SELECT TOP 100 2003 + ROW_NUMBER() OVER (ORDER BY <AnyColumn>) AS Yr
FROM dbo.<AnyTable>
) Years
WHERE Yr <= YEAR(GETDATE())
Обратите внимание, что <AnyTable>
должно содержать как минимум количество строк, равное количеству лет, которое вам требуется.
Edit (Cudo's to Joshua)
- Желательно, чтобы вы выбрали таблицу, которая, как вы знаете, не будет усечена и / или удалена. Достаточно большой
system table
должен прийти в голову.
- В настоящее время, будучи намного старше и мудрее (по крайней мере, старше), я бы выполнил это требование, используя
CTE
, как упомянуто в ответе Джошуа. Техника CTE
намного лучше и менее подвержена ошибкам, чем текущее решение ROW_NUMBER
.