A estrutura do seu CTE recursivo está desativada e a metade superior da união deve ser um caso base de semente. Então, a parte recursiva deve adicionar um dia ao valor de entrada anterior:
WITH RECURSIVE cte (n, dt) AS (
SELECT 1, '2019-09-20'
UNION ALL
SELECT n + 1, TIMESTAMPADD(DAY, n, '2019-09-20') FROM cte WHERE n <= 5
)
SELECT * FROM cte;
Demonstração
É importante notar que usamos
TIMESTAMPADD()
aqui para contornar o problema do INTERVAL
expressão, que não pode realmente receber uma variável. Se você quiser usar essa abordagem para gerar uma série de datas que correspondam aos valores de e para em sua tabela, tente uma junção:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Quando usado desta forma, o CTE recursivo está agindo como um calendário tabela.