返回连续日期的临时表

Nat*_*oop 5 sql t-sql sql-server sql-server-2005

我需要创建一个返回连续日期表的函数.我会传递一个最小和最大日期.

我希望它可以这样调用:

SELECT * FROM GetDates('01/01/2009', '12/31/2009')
Run Code Online (Sandbox Code Playgroud)

我目前有一个存储过程执行此操作,但需求已更改,现在我需要包括从联合中返回的数据:

 with mycte as
(
     select cast(@minDate as datetime) DateValue
     union all
     select DateValue + 1
     from    mycte   
     where   DateValue + 1 <= @maxDate
 )
 select DateValue
 from    mycte
option (maxrecursion 1000)
Run Code Online (Sandbox Code Playgroud)

然而,问题是我需要将递归设置为大于100.根据Gail Erickson [MS]关于eggheadcafe的帖子,目前不支持.

如果没有创建一个只有日期的真实(非临时)表,有没有办法做到这一点?

我使用的是SqlServer2005.

Rem*_*anu 6

您最好的选择是实际拥有一个物理日期表.即使很长一段时间也没有那么多,并且比从临时表或递归ctes中即时实现它们要快得多.

  • 这不是一个坏主意.它违背了正常的算法导向思维方式,这就是全部.实际上,许多人建议使用一个只有0到1密耳的数字表.或类似的,用于类似于你的连接和查询. (2认同)