如何根据价格前缀(+, - )创建计算产品成本的函数

时间:2013-08-12 13:53:58

标签: sql-server function

我想在sql server中创建一个函数,根据其价格前缀返回产品成本。价格前缀为“+”或“ - ”。

我的代码是:

  CREATE FUNCTION calculateOptionCost ( @product_price Decimal, @optionPrice Decimal,    @action varchar )
    RETURNS Decimal
    AS
    BEGIN
    IF (@action == '+')
    RETURN (@product_price + @optionPrice);
    IF (@action == '-')
    RETURN (@product_price - @optionPrice);
    END
    GO  

在参数中,我已经通过了它的母产品价格,价格和价格前缀。但是当我执行此代码时,系统会给出错误:

The last statement included within function must be a return statement.

4 个答案:

答案 0 :(得分:1)

您的路径不会返回任何值(如果@action不是+-

添加RETURN @product_price作为最后一行,你会没事的

OR

假设如果param不是+,则它是-并使用ELSE

答案 1 :(得分:1)

试试这个:

CREATE FUNCTION calculateOptionCost (@product_price Decimal, @optionPrice Decimal, @action varchar)
RETURNS Decimal
AS
BEGIN
    Declare 
    @Result Decimal
    IF (@action == '+')
    Begin
        Set @Result = (@product_price + @optionPrice);
    End
    IF (@action == '-')
    Begin
        Set @Result = (@product_price - @optionPrice);
    End
    Return @Result
END
GO

答案 2 :(得分:1)

如果您愿意,请使用此功能:

CREATE FUNCTION calculateOptionCost (
    @product_price decimal, 
    @optionPrice decimal,    
    @action varchar)
RETURNS Decimal
AS
BEGIN
    DECLARE @res decimal
    IF (@action == '+')
        SET @res = @product_price + @optionPrice
    ELSE
        SET @res = @product_price - @optionPrice

    RETURN @res
END
GO

DECLARE @action char(1) = '-'
SELECT price1, price2, calculateOptionCost(price1, price2, @action)
FROM tbl1

但是,如果我是你,我不会使用某个功能。有更好,更优的方法。

我建议你将基于函数的调用的执行时间与这个表达式进行比较,它完全相同:

SELECT price1, price2, calculate.OptionCost
FROM tbl1
CROSS APPLY (
    SELECT OptionCost = CASE
        WHEN @action = '+' THEN price1 + price2
        WHEN @action = '-' THEN price1 - price2
        ELSE NULL END
) calculate

但是,我会简化逻辑:如果'+'出现,请考虑积极。否则否定。

SELECT price1, price2, calculate.OptionCost
FROM tbl1
CROSS APPLY (
    SELECT OptionCost = CASE
        WHEN @action = '+' THEN price1 + price2
        ELSE price1 - price2 END
) calculate

答案 3 :(得分:0)

  

您需要确保该函数返回所有执行路径中的值。

如果if conditions are false(@action既不是+也不是 - )那么函数会返回什么?

如果不满足这两个条件,则退回产品价格。

CREATE FUNCTION calculateOptionCost ( @product_price Decimal, @optionPrice Decimal, @action varchar)
RETURNS Decimal
AS
BEGIN
    IF (@action == '+')
        RETURN (@product_price + @optionPrice);
    IF (@action == '-')
        RETURN (@product_price - @optionPrice);
    RETURN @product_price
END
GO