something like this will work. This is a variation of your method, but it does not use the alphabetic format MM / DD / YYYY, and it will not explode from bad input (better or worse).
declare @month tinyint
declare @day tinyint
set @month = 9
set @day = 1
declare @date datetime
set @date = convert(char(4),year(getdate()))+'0101'
set @date = dateadd(month,@month-1,@date)
set @date = dateadd(day,@day-1,@date)
if @date <= getdate()-1
set @date = dateadd(year,1,@date)
select @date
Alternatively, to create a string in the format YYYYMMDD:
set @date =
right('0000'+convert(char(4),year(getdate())),4)
+ right('00'+convert(char(2),@month),2)
+ right('00'+convert(char(2),@day),2)
, :
declare @month tinyint
declare @day tinyint
set @month = 6
set @day = 24
declare @date datetime
declare @today datetime
set @date = floor(convert(float,getdate()))
set @today = @date
set @date = dateadd(month,@month-month(@date),@date)
set @date = dateadd(day,@day-day(@date),@date)
if @date < @today set @date = dateadd(year,1,@date)
select @date