NEXTBIRTHAYDATE

DECLARE @date_of_birth date = '2004-02-29'
DECLARE @todays_date date = '2014-03-01'

SELECT
      DATEADD(YEAR,
            -- Number of whole years between date of birth and today's date plus 1
            CASE                                
                  -- Month of date of birth greater than month of today's date
                  WHEN DATEPART(MONTH, @date_of_birth) > DATEPART(MONTH, @todays_date)
                  THEN DATEDIFF(YEAR, @date_of_birth, @todays_date)                              

                  -- Month of date of birth same as month of today's date and day of date of birth greater than day of today's date
                  WHEN DATEPART(MONTH, @date_of_birth) = DATEPART(MONTH, @todays_date) AND DATEPART(DAY, @date_of_birth) > DATEPART(DAY, @todays_date)
                  THEN
                        CASE
                              -- Date of birth is on a leap day and this year is not a leap year
                              WHEN DATEPART(MONTH, @date_of_birth) = 2 AND DATEPART(DAY, @date_of_birth) = 29 
                                          AND NOT (DATEPART(YEAR, @todays_date) % 400 = 0 OR (DATEPART(YEAR, @todays_date) % 100 <> 0 AND DATEPART(YEAR, @todays_date) % 4 = 0))
                              THEN DATEDIFF(YEAR, @date_of_birth, @todays_date) + 1
                              -- Else
                              ELSE DATEDIFF(YEAR, @date_of_birth, @todays_date)
                        END

                  -- Else
                  ELSE DATEDIFF(YEAR, @date_of_birth, @todays_date) + 1
            END,
            @date_of_birth)
Clear Cardinal