在搜索错误方面投入了大量时间。我使用了另外两个工作函数作为构建它的指导,但是,唉,我已经被打败了。谁能告诉我这是为什么返回一个语法错误:Tsql IF ... CASE返回语法错误
FUNCTION FN_USER_MATRIX_PriceTweak
(
@Cost float, @CostAvg float,
@Tier1MaxVal float, @Tier1Mult float,
@Tier2MaxVal float, @Tier2Mult float,
@Tier3MaxVal float, @Tier3Mult float,
@Tier4MaxVal float, @Tier4Mult float,
@Tier5MaxVal float, @Tier5Mult float,
@Above5Mult float
)
RETURNS float
AS
BEGIN
DECLARE @Result float
SET @Result =
(
IF @Cost <= @CostAvg
CASE
WHEN @Cost <= @Tier1MaxVal THEN @Cost * @Tier1Mult
WHEN @Cost <= @Tier2MaxVal THEN @Cost * @Tier2Mult
WHEN @Cost <= @Tier3MaxVal THEN @Cost * @Tier3Mult
WHEN @Cost <= @Tier4MaxVal THEN @Cost * @Tier4Mult
WHEN @Cost <= @Tier5MaxVal THEN @Cost * @Tier5Mult
ELSE @Cost * @Above5Mult
ELSE
CASE
WHEN @CostAvg <= @Tier1MaxVal THEN @CostAvg * @Tier1Mult
WHEN @CostAvg <= @Tier2MaxVal THEN @CostAvg * @Tier2Mult
WHEN @CostAvg <= @Tier3MaxVal THEN @CostAvg * @Tier3Mult
WHEN @CostAvg <= @Tier4MaxVal THEN @CostAvg * @Tier4Mult
WHEN @CostAvg <= @Tier5MaxVal THEN @CostAvg * @Tier5Mult
ELSE @CostAvg * @Above5Mult
)
RETURN @Result
END
我的错误信息:
消息156,级别15,状态1,过程FN_USER_MATRIX_PriceTweak,行中的关键字“IF” 21 附近有语法错误。
消息156,级别15,状态1,过程FN_USER_MATRIX_PriceTweak,第22行 关键字 '案' 附近有语法错误。
您没有使用IF语句正常。您应该使用嵌套的CASE语句来代替 –
原来有两个问题,在初始响应(或帮助菜单)中没有完全解释:我的CASE语句需要END语句,这是我不知道的要求。 –
其次,SET的右侧不能以IF语句开始。 –