只是为了好玩,我想写一个表,尊贵的功能,以产生一个表格的日期。 为测试目的,我很难编码的价值观念应该是通过变量。
就其本身而言,这一工作:
WITH cte AS (
SELECT cast('2021-10-01' AS date) AS date
UNION ALL
SELECT dateadd(day,1,date) FROM cte WHERE date<current_timestamp
)
SELECT * FROM cte OPTION(maxrecursion 0);
注意到 OPTION
在结束。
作为一个功能,它不会的工作,除非我删除了 OPTION
条款在结束:
CREATE FUNCTION dates(@start date, @rows INT) RETURNS TABLE AS
RETURN
WITH cte AS (
SELECT cast('2021-10-01' AS date) AS date
UNION ALL
SELECT dateadd(day,1,date) FROM cte WHERE date<current_timestamp
)
SELECT * FROM cte -- OPTION(maxrecursion 0)
;
对测试数据,这是确定的,但它肯定会失败,如果我给它的日期在今年年初,因为它涉及超过100递归.
是否有一个正确的语法用于这一点,或者是Microsoft的另一个怪癖,它需要一个解决方法?