• A more cleaner version:

    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

    )

    SELECT MonthNum =

    CASE T.N % 12

    WHEN 0 THEN 12

    ELSE T.N % 12

    END

    , DATEPART(YY,DATEADD(M,N-1,@StartDATE)) [YEAR]

    , DATENAME(MM,DATEADD(M,N-1,@StartDATE)) [MONTH]

    FROM Tally T

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