进牛人优化下SQL存储过程
合成某个卡片,数据库中设置了多个合成材料,这个材料有可能1个,也有可最多是13个,我现在是一个个逐一判断,有点傻瓜,是否可以优化?求高手帮忙。
ALTER PROCEDURE [dbo].[Usp_Prize_Mixture_Result]			--卡片合成结果	
@ID	INT,			--ID	
@Code	INT,			--编码
@Type   INT			--类型(25,50,75,100)
AS	
BEGIN
	BEGIN TRAN Tran_MixturePrize
	--检测VIP会员
	DECLARE @VIP INT  
	SELECT @VIP = F_VIP FROM T_Prize_Mixture WHERE K_Code = @Code
	IF @VIP = 1
	BEGIN
		IF NOT EXISTS(SELECT * FROM T_User_VIP WHERE K_ID=@ID)
		BEGIN
			SELECT 2
			RETURN
		END
	END	
	DECLARE @PropCode int
	DECLARE @Num int
	DECLARE @Money1 int
	DECLARE @Money2 int
	DECLARE @Money3 int
	DECLARE @Money4 int
	SELECT @PropCode = F_Code, @Num = F_Num,@Money1 = F_Money1,
	@Money2 = F_Money2,@Money3 = F_Money3,@Money4 = F_Money4	
	FROM T_Prize_Mixture WHERE K_Code = @Code		
	--检测特殊道具
	IF @PropCode > 0 AND @Num > 0  
	BEGIN	
		IF NOT EXISTS(SELECT * FROM T_Prize_UserTicket
					  WHERE F_ID = @ID
						AND F_Code = @PropCode
						AND F_Quantity >= @Num)
		BEGIN	
			ROLLBACK TRAN Tran_MixturePrize
			SELECT 3
			RETURN
		END
		ELSE
		BEGIN
			EXECUTE [Usp_Prize_UsePrize] @ID,@PropCode,@Num
		END
	END	
	DECLARE @Money int
	IF @Type = 25
	BEGIN
		set @Money = @Money1
	END	
	IF @Type = 50
	BEGIN
		set @Money = @Money2
	END	
	IF @Type = 75
	BEGIN
		set @Money = @Money3
	END	
	IF @Type = 100
	BEGIN
		set @Money = @Money4
	END	
	--检测钱
	DECLARE @sign0 INT
	EXECUTE [Usp_User_UpdateYMoney_Public] @ID,@Money,0,@sign0 out
	IF @sign0 = 0  
	BEGIN
		ROLLBACK TRAN Tran_MixturePrize
		SELECT 4
		RETURN
	END	
	--逐一检测合成材料是否足够	
	IF @Code = 13305 --生日卡(1986/12/30)--11501[0]--12302[2]--12309[9]--12314[A/1]
	BEGIN
		--declare @today varchar(30)
		--set @today = CONVERT(varchar(30),GETDATE(),111)		
		--declare @Num1 varchar(1)
		--declare @Num2 varchar(1)
		--declare @Num3 varchar(1)
		--declare @Num4 varchar(1)
		--declare @Num5 varchar(1)
		--declare @Num6 varchar(1)
		--declare @Num7 varchar(1)
		--declare @Num8 varchar(1)		
		--set @Num1 = substring(@today,1,2)
		--set @Num2 = substring(@today,2,3)
		--set @Num3 = substring(@today,3,4)
		--set @Num4 = substring(@today,4,5)
		--set @Num5 = substring(@today,6,7)
		--set @Num6 = substring(@today,7,8)
		--set @Num7 = substring(@today,9,10)
		--set @Num8 = substring(@today,10,11)		
		--DECLARE @Code1 int		
		--SELECT * FROM T_Prize_UserTicket WHERE  
		--F_ID = @ID AND F_Quantity > 0 AND F_Code = @Code1		
		ROLLBACK TRAN Tran_MixturePrize
		SELECT 5
		RETURN
	END
	ELSE
	BEGIN
		DECLARE @MixCode1 int
		DECLARE @MixNum1 int
		DECLARE @MixCode2 int
		DECLARE @MixNum2 int
		DECLARE @MixCode3 int
		DECLARE @MixNum3 int
		DECLARE @MixCode4 int
		DECLARE @MixNum4 int
		DECLARE @MixCode5 int
		DECLARE @MixNum5 int
		DECLARE @MixCode6 int
		DECLARE @MixNum6 int
		DECLARE @MixCode7 int
		DECLARE @MixNum7 int
		DECLARE @MixCode8 int
		DECLARE @MixNum8 int
		DECLARE @MixCode9 int
		DECLARE @MixNum9 int
		DECLARE @MixCode10 int
		DECLARE @MixNum10 int
		DECLARE @MixCode11 int
		DECLARE @MixNum11 int
		DECLARE @MixCode12 int
		DECLARE @MixNum12 int
		DECLARE @MixCode13 int
		DECLARE @MixNum13 int
		SELECT @MixCode1=F_Code1,@MixNum1=F_Num1,@MixCode2=F_Code2,@MixNum2=F_Num2,
		@MixCode3=F_Code3,@MixNum3=F_Num3,@MixCode4=F_Code4,@MixNum4=F_Num4,
		@MixCode5=F_Code