Jen tak pro zábavu, snažím se napsat stolní cenil funkce generovat tabulku data. Pro účely testování jsem hard-kódování hodnoty, které by měly být předány v proměnné.
Samo o sobě to funguje:
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);
Poznámka: OPTION
na konci.
Jako funkci, nebude to fungovat, pokud jsem odstranit OPTION
klauzule na konci:
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)
;
Pro testovací data, to je v POŘÁDKU, ale to se jistě nepodaří, když jsem se dát to datum na začátku roku, protože to zahrnuje více než 100 recursions.
Je tu správnou syntaxi pro tento, nebo je to další Microsoft Vtípek, který potřebuje řešení?