如何 return 根据函数中的条件判断值? SQL 服务器

How to return value based on if condtion in function? SQL Server

这是我的功能,return 仅限欧洲价格

ALTER FUNCTION [prices].[UDF_Fn_IsPriceAvailable]
    (@Product NVARCHAR(100),
     @Region NVARCHAR(100))
RETURNS NVARCHAR(100)
BEGIN
    RETURN 
        (SELECT ISNULL(PRICE, 0) AS PRICE
         FROM [dbo].[tblPricesEurope]
         WHERE product = @Product

END

现在的问题是我的功能应该return基于地区的价格。

我有两个表

我的 SQL 技能不是很好。无法return按地区定价?

我已经尝试过但我一直收到此错误

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

ALTER FUNCTION [prices].[UDF_Fn_IsPriceAvailable]
    (@Product NVARCHAR(100),
     @Region NVARCHAR(100))
RETURNS NVARCHAR(100)
BEGIN
    IF (@Region = 'Europe')
    BEGIN 
        RETURN 
            (SELECT ISNULL(PRICE, 0) AS PRICE
             FROM [dbo].[tblPricesEurope]
             WHERE product = @Product)
    END
    ELSE IF (@Region = 'Asia') 
    BEGIN 
        RETURN 
            (SELECT ISNULL(India,0) AS PRICE
             FROM [dbo].[tblPricesAsia]
             WHERE product = @Product)
    END
END

错误确实说明了一切 - 必须有 ONE 最终 RETURN 语句 - 所以将代码更改为:

ALTER FUNCTION [prices].[UDF_Fn_IsPriceAvailable]
    (@Product NVARCHAR(100),
     @Region NVARCHAR(100))
RETURNS DECIMAL(20,2)
BEGIN
    DECLARE @Result DECIMAL(20,2);

    IF (@Region = N'Europe')
    BEGIN 
        SELECT @Result = ISNULL(PRICE, 0.0) 
        FROM [dbo].[tblPricesEurope]
        WHERE product = @Product
    END
    ELSE IF (@Region = N'Asia') 
    BEGIN 
        SELECT @Result = ISNULL(PRICE, 0.0) 
        FROM [dbo].[tblPricesAsia]
        WHERE product = @Product
    END

    RETURN @result;
END

另外:如果你有一个 numeric PRICE 列 - 为什么 这个函数 return 有 NVARCHAR 结果吗?!?!?!?我把它改成了更合理的 DECIMAL(20,2) return 类型。

另一种选择是:

DECLARE @Result DECIMAL(20,2);

SELECT
  @Result = ISNULL(PRICE, 0.0)
FROM
(
  SELECT PRICE
  FROM [dbo].[tblPricesEurope]
  WHERE product = @Product AND @Region = N'Europe'

  UNION ALL  

  SELECT PRICE
  FROM [dbo].[tblPricesAsia]
  WHERE product = @Product AND @Region = N'Asia'
) AS X

由于 where 条件中的常量,它将 return 仅来自所选 table 的结果。

有了这个,您就不必使用 IF 语句了,只需确保每个 table 都有自己的专用常量。

你想 return 值基于 SQL Server 中函数中的 if 条件,那么你可以在你的存储过程中传递 output parameter,这是一个很好的方法。

我已经为您制作了一个简单的演示,用于在用户中插入记录 table 和 returning 验证消息以及根据条件适当的其他消息。

要获取 output parameter 的详细信息,您可以访问此 article,我在其中详细解释了所有信息,因此您可以对 output parameter

有更多了解

LINK : https://coding-vila.blogspot.com/2018/11/how-to-pass-output-parameter-to-stored-procedure-in-microsoft-sql-server.html

 CREATE PROCEDURE L_UsersIns
    @FirstName VARCHAR(50) ,  
    @LastName VARCHAR(50) ,  
    @Email VARCHAR(50) ,  
    @ReturnValue VARCHAR(50) = '' OUT  
AS   
    BEGIN  

        SET NOCOUNT ON ;  

  IF EXISTS (SELECT 1 FROM L_Users WHERE UserName = @UserName) 
  BEGIN
   SET @ReturnValue = @UserName + ' is Already Exists, Please Try Different Username.'  
   RETURN
  END

  IF EXISTS (SELECT 1 FROM L_Users WHERE Email = @Email) 
  BEGIN
   SET @ReturnValue = @Email + ' is Already Exists, Please Try Different Email.'  
   RETURN
  END

        IF NOT EXISTS ( SELECT 1 FROM L_Users  WHERE   UserName = @UserName AND Email = @Email)   
            BEGIN  
                INSERT  INTO L_Users  
                        ( 
                          FirstName ,  
                          LastName ,  
                          Email  
                        )  
                VALUES  ( 
                          @FirstName ,  
                          @LastName ,  
                          @Email   
                        )  
                SET @ReturnValue = @UserName + ' is Registered Successfully'  
            END  
        ELSE   
            BEGIN  
                --SET @ReturnValue = 1  
                SET @ReturnValue = @UserName + ' is Already Exists'  
            END  
    END