WITH Dates AS (
SELECT
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AS dt -- First day of current month
UNION ALL
SELECT
DATEADD(day, 1, dt)
FROM
Dates
WHERE
DATEPART(month, DATEADD(day, 1, dt)) = DATEPART(month, GETDATE())
)
SELECT
dt AS calendar_date
FROM
Dates
OPTION (MAXRECURSION 366); -- Set max recursion limit, 366 covers leap years