Solo per divertimento, sto cercando di scrivere una funzione con valori di tabella per creare una tabella di date. Per scopi di test, io sono hard-codifica i valori che devono essere passati in variabili.
Di per sé, questo funziona:
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);
Nota il OPTION
alla fine.
Come una funzione, non funzionerà a meno che io non rimuovere il OPTION
clausola alla fine:
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)
;
Per i dati di test, che è OK, ma sarà certamente fallire se posso dare è data all'inizio dell'anno, poiché coinvolge più di 100 ricorsioni.
C'è una sintassi corretta per questo, o è un'altra Microsoft Peculiarità che ha bisogno di una soluzione alternativa?