0

我想在 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

4 回答 4

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
于 2013-08-12T14:04:14.690 回答
1

您有一个不返回任何值的路径(如果@action不是 a+或 a -

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

或者

假设如果参数不是 a+它是 a-并使用 ELSE

于 2013-08-12T13:59:16.067 回答
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
于 2013-08-12T13:59:36.207 回答
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 
于 2013-08-12T13:59:26.867 回答