Следующие коды будут печатать все даты в течение текущего года на SQL Server 2008R2
with x (dy, yr)
as (
select dy, year (dy) yr
from (
select getdate () - datepart (dy, getdate ()) + 1 dy
-- the first date of the current year
) tmp1
union all
select dateadd (dd, 1, dy), yr
from x
where year (dateadd (dd, 1, dy)) = yr
)
select x.dy
from x
option (maxrecursion 400)
Но есть некоторые моменты, которые я не могу понять
- Насколько я вижу, первая дата должна была быть напечатана 400 раз, отфильтрованы ли все повторы?
- когда я изменяю 400 на 364, возвращается следующая ошибка:
[Err] 42000 - [SQL Server] Оператор завершен. Максимум
рекурсия 363 была исчерпана до завершения оператора.
Но как процессор узнает, когда оператор завершится?