下面的代碼將打印的所有日期貫穿本年度SQL Server上2008R2打印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,以下錯誤回報:
[錯誤] 42000 - [SQL服務器]終止聲明。在語句完成之前,遞歸363的最大值已經耗盡。
但是,處理器如何知道語句何時完成?
「處理器」在**語句完成時不知道**,但它只知道「退出條件」('year(...)!= yr')沒有但它知道它需要繼續... –
是啊...返回條件很隱含 – manuzhang