Doar pentru distracție, încerc să scriu o masă evaluate funcție pentru a genera un tabel de date. Pentru testare, sunt greu de codificare a valorilor care ar trebui să fie trecut în variabile.
De la sine, acest lucru funcționează:
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);
Notă OPTION
la sfârșitul anului.
Ca o funcție, acesta nu va funcționa decât dacă am elimina OPTION
clauza de la sfârșitul:
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)
;
Pentru datele de test, e OK, dar va eșua cu siguranță dacă I-l dau întâlnire la începutul anului, deoarece implică mai mult de 100 de reveniri.
Există o sintaxa corectă pentru acest lucru, sau este un alt eroare Microsoft Capriciu care are nevoie de o soluție?