DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SELECT @StartDate = '20100101'
SELECT @EndDate = '20121231'
SELECT DISTINCT DATEADD(day, -1, DATEADD(month, [number], CONVERT(DATETIME, '19000201')))
AS MonthEnd
FROM master.dbo.spt_values
WHERE ([number] BETWEEN 0 AND 2000)
AND (@StartDate <= DATEADD(day, -1, DATEADD(month, [number], CONVERT(DATETIME, '19000201'))) AND @EndDate >= DATEADD(day, -1, DATEADD(month, [number], CONVERT(DATETIME, '19000201'))) )
ORDER BY DATEADD(day, -1, DATEADD(month, [number], CONVERT(DATETIME, '19000201')))