2011-10-25 38 views
1

我出生在1978年12月22日CTE查詢有2個條件不起作用?

我想要一個查詢(在CTE!),以顯示我所有的生日(日期部分天= 22)

declare @t0 datetime = '1978/12/22'; 
declare @t1 datetime = getdate(); 


with CTEE (val,day1) 
AS 
(
    SELECT @t0,DATEPART(day,@t0) 
    UNION all 
    SELECT DATEADD(day,1,val) , DATEPART(day,day1) from ctee where(DATEADD(day,1,val) <[email protected]) and DATEPART(day,day1)=22 
) 
select val,day1 from CTEE OPTION (MAXRECURSION 20000) 

如何過這好像又回到了我1排(爲什麼 ???)

If I removeand DATEPART(day,day1)=22所以它給了我所有的日子,我活着。

我找到了解決辦法是這樣的:

declare @t0 datetime = '1978/12/22'; 
    declare @t1 datetime = getdate(); 


    with CTEE (val,day1) 
    AS 
    (
     SELECT @t0,DATEPART(day,@t0) 
     UNION all 
     SELECT DATEADD(day,1,val) , DATEPART(day,day1) from ctee where(DATEADD(day,1,val) <[email protected]) 

    ) 
    select val,day1 from CTEE where day1=22 OPTION (MAXRECURSION 20000) 

但我的問題是,爲什麼第一個查詢沒有工作?

回答

0

因爲第二條記錄是1978-12-23

SQL Server Books Online

終止檢查記載,不滿足條件DATEPART(day,day1)=22,使遞歸步驟返回任何結果,這終止了遞歸是隱式的;當前一次調用返回的行不爲 時,遞歸停止。

+0

多數民衆贊成多說,我想只是誰是誰datepart = 22 –

+0

我粗體了!非常感謝。我不知道。我想只有當他完成了所有的選擇 –

+0

@RoyiNamir - 從BOL [終止檢查是隱含的;當前一次調用沒有行時,遞歸停止。](http://msdn.microsoft.com/en-us/library/ms186243.aspx) –