我生于1978/12/22
我想要一个查询(在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) <=@t1) and DATEPART(day,day1)=22
)
select val,day1 from CTEE OPTION (MAXRECURSION 20000) 这怎么回我1行(为什么是?)
If I remove,and 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) <=@t1)
)
select val,day1 from CTEE where day1=22 OPTION (MAXRECURSION 20000) 但是我的问题是,为什么在第一个查询中不起作用?
发布于 2011-10-25 21:59:41
因为第二个记录是1978-12-23。
这不符合DATEPART(day,day1)=22条件,因此递归步骤不返回任何结果,这将终止Server联机丛书中记录的递归
终止检查是隐式的;当上一次调用没有返回任何行时,递归停止。
https://stackoverflow.com/questions/7896260
复制相似问题