В SQL 2000:
Я пытаюсь написать динамический UDF, который будет извлекать значения одного из пяти полей в зависимости от входных критериев. Вот то, что я имею до сих пор:
CREATE FUNCTION dbo.fBudgetBid ( @sJob int, @sCO nvarchar(10), @sCat nvarchar(10) )
RETURNS float
AS
BEGIN
Declare @ERC float
Set @ERC = Case @sCat
WHEN 'Field' Then Select [Field] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO
WHEN 'Eng' Then Select [Eng] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO
WHEN 'PM' Then Select [PM] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO
WHEN 'Shop' Then Select [Shop] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO
WHEN 'Purch' Then Select [Purch] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO
END
Return @ERC
END
Я использовал один оператор SELECT для возврата значения, и я использовал структуру CASE WHEN THEN для возврата жестко закодированных значений. Не повезло, смешивая два. ** Имена были изменены, чтобы защитить невинных. **
ОБНОВЛЕНИЕ: получилось так, как показано ниже. Скобки изменили мир к лучшему.
BEGIN
Return (Case @sCat
WHEN 'Field' Then (Select [Field] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO)
WHEN 'Eng' Then (Select [Eng] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO)
WHEN 'PM' Then (Select [PM] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO)
WHEN 'Shop' Then (Select [Shop] From [dbo].[Estimate] Where [Job] = @sJob AND [CO] = @sCO)
WHEN 'Purch' Then (Select [Purch] From [dbo].[Estimate] Where [Job] = @sJob AND [] ] = @sCO)
END)
END