यह तब भी काम करता है, जब @StartDate महीने की पहली तारीख न हो। मुझे लगता है कि अगर यह महीने की शुरुआत नहीं है, तो आप अगले महीने की पहली तारीख से शुरुआत करना चाहते हैं। अन्यथा +1 हटा दें.:
;WITH cte AS (
SELECT CASE WHEN DATEPART(Day,@StartDate) = 1 THEN @StartDate
ELSE DATEADD(Month,DATEDIFF(Month,0,@StartDate)+1,0) END AS myDate
UNION ALL
SELECT DATEADD(Month,1,myDate)
FROM cte
WHERE DATEADD(Month,1,myDate) <= @EndDate
)
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0)