• If you dont have a tally table, you can utilize this code :

    DECLARE @StartDATE DATETIME

    SET @StartDATE = '01-01-1985'

    ;WITH Tens (N) AS

    (

    SELECT 0 N UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL

    SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL

    SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0

    ),

    Thousands (N) AS

    (

    SELECT t1.N FROM Tens t1 CROSS JOIN Tens t2 CROSS JOIN Tens t3

    ),

    Tally AS

    (

    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) N FROM Thousands

    ),

    Month_Numbers ( MonthNum , Month_Name) AS

    (

    SELECT 1 , 'January'

    UNION ALL SELECT 2 , 'February'

    UNION ALL SELECT 3 , 'March'

    UNION ALL SELECT 4 , 'April'

    UNION ALL SELECT 5 , 'May'

    UNION ALL SELECT 6 , 'June'

    UNION ALL SELECT 7 , 'July'

    UNION ALL SELECT 8 , 'August'

    UNION ALL SELECT 9 , 'September'

    UNION ALL SELECT 10 , 'October'

    UNION ALL SELECT 11 , 'November'

    UNION ALL SELECT 12 , 'December'

    )

    SELECT Nums.MonthNum , DATEPART(YY,DATEADD(M,N-1,@StartDATE)) [YEAR], DATENAME(MM,DATEADD(M,N-1,@StartDATE)) [MONTH]

    FROM Tally T

    JOIN Month_Numbers Nums

    ON DATENAME(MM,DATEADD(M,N-1,@StartDATE)) = Nums.Month_Name

    WHERE DATEPART(YY,DATEADD(M,N-1,@StartDATE)) <= YEAR(GETDATE())

    The @StartDate will specify from what year your output should start.