首页 > 解决方案 > SQL Server 创建函数

问题描述

我已经完成了 IF 语句,并准备根据提供的条件返回值。我也尝试过 RETURN CASE 并且收到完全相同的错误

目的是将货币从英镑转换为美元或欧元,它进行乘法并返回。

稍后我会完善对话,但请帮助使其返回值。

如果您在我的查询末尾附近查看,您将看到 RETURN @Converted,虽然在这里看起来不错,但它给出了以下错误

[ 消息 178,级别 15,状态 1,过程 fnCurrencyConverter,第 23 行 在此上下文中不能使用具有返回值的 RETURN 语句。]

谢谢

USE temp
GO

CREATE FUNCTION dbo.fnCurrencyConverter (@inPutMoneey INT, @inPutRegionCode VARCHAR(5))
RETURNS @Return TABLE
(
    Monee MONEY, 
    RegionCode CHAR(5)
)
AS
BEGIN

DECLARE @Converted MONEY

SET @Converted = 0

    BEGIN
        IF(@inPutRegionCode = 'US')
            SET @Converted = @inPutMoneey * 1.29
        ELSE IF(@inPutRegionCode = 'EU')
            SET @Converted = @inPutMoneey * 1.13
        ELSE IF(@inPutRegionCode = 'AFG')
            SET @Converted = @inPutMoneey * 0.50
    END
RETURN 
    @Converted
END

如果地区代码是美国,则将该值乘以 1.29,即当前的英镑兑美元汇率,依此类推。

标签: sqlsql-server

解决方案


无需提及表变量名称。只需提及返回。足够了。您没有正确填充表格。

USE tempdb
GO

CREATE FUNCTION dbo.fnCurrencyConverter (@inPutMoneey INT, @inPutRegionCode VARCHAR(5))
RETURNS @Return TABLE
(
    Monee MONEY, 
    RegionCode CHAR(5)
)
AS
BEGIN

DECLARE @Converted MONEY

SET @Converted = 0

    BEGIN
        IF(@inPutRegionCode = 'US')
        BEGIN
            SET @Converted = @inPutMoneey * 1.29
            INSERT INTO @Return VALUES (@Converted, 'US')
        END 
        ELSE IF(@inPutRegionCode = 'EU')
        BEGIN
            SET @Converted = @inPutMoneey * 1.13
            INSERT INTO @Return VALUES (@Converted, 'EU')
        END
        ELSE IF(@inPutRegionCode = 'AFG')
        BEGIN
            SET @Converted = @inPutMoneey * 0.50
            INSERT INTO @Return VALUES (@Converted, 'AFG')
        END
    END
RETURN     
END

推荐阅读