Witam wszystkich,
Jakiś czas zacząłem przygodę z SQL i staram się rozwijać wiedzę w tym temacie (nie pracuję z SQL na co dzień tylko uczę się go samemu w wolnym czasie).
Czytając jedną z książek o tej tematyce natknąłem się na 'challenge' aby napisać polecenie które wygeneruje pierwsze i ostatnie dni miesięcy od 2010 to 2015 roku.
Pisząc kod wydawało mi się, że udało mi się tego dokonać ale... za każdym razem dostaję tylko jeden wynik (dzień pierwszego miesiąca).
Wygląda to tak jakby funkcja nie chciała się powtórzyć.
Wklejam kod poniżej:
WITH TabelaDynamiczna (Pierwszy, licznik) AS
(SELECT CAST(CAST(YEAR('2010-01-01') AS varchar) + '-' + CAST(MONTH('2010-01-01') AS varchar) + CAST('-01' AS varchar) AS datetime) AS Pierwszy , 1 AS licznik
UNION ALL
SELECT DATEADD(m, 1, Pierwszy), licznik + 1
FROM TabelaDynamiczna
WHERE licznik < DATEDIFF(m,2010-01-01,2015-12-31)) -- wydawało mi się, że dzięki temu funkcja będzie się zapętlać aż do osiągnięcia końcowej daty...
-- Tabela Dynamiczna stworzona
SELECT Pierwszy AS PierwszyDzienMiesiaca, licznik, CAST(DATEDIFF(d, 1, DATEADD(m, 1, Pierwszy)) AS datetime) AS OstatniDzienMiesiaca
FROM TabelaDynamiczna
Niestety, jak pisałem powyżej nie udało się osiągnąć zamierzonego efektu.
Próbowałem potem używać funkcji WHILE/BEGIN/SET/END ale zupełnie nie udało mi się jej wpasować w kod powyżej i SQL Server 2016 nie chciał wykonać operacji.
Czy mógłbym prosić o rozjaśnienie w jaki sposób zmusić bazę danych do wygenerowania kolejnych miesięcy trzymając się w.w schematu?
Pozdrawiam i z góry dziękuję za odpowiedź!