【问题标题】:Pass multiple parameters to sql function向sql函数传递多个参数
【发布时间】:2018-06-08 23:07:36
【问题描述】:

我有如下数据的sql表

SnackID        Name
   1         Chicken
   2         Soda
   3         Chocolate 
   4         IceCream 

我有下面的用户定义函数,它接受参数作为具有多个值的字符串,如“鸡”、“苏打”。

CREATE FUNCTION GetSnackCodes
(
  @myValues varchar(max)
)
RETURNS @SnacksCodes TABLE 
(
       mySnackCoded int NULL
)
AS
BEGIN 

 insert into @SnacksCodes 
 select SnackID  from Snack where Name In (@myValues)

return ;
END;
GO

当我尝试通过将多个值传递给此变量来调用此函数时,我没有得到预期的结果。 我猜它正在尝试将多个(逗号分隔)值作为单个值进行搜索。

关于如何传递此值的任何其他可能的解决方法?

【问题讨论】:

    标签: mysql sql sql-server sql-server-2008


    【解决方案1】:

    您的猜测是正确的 - 当您传递一个逗号分隔值的字符串时,SQL Server 将其视为单个字符串值。

    改用table valued parameter:

    CREATE TYPE SnackCode As Table (
        Name NVARCHAR(50)
    );
    GO;
    CREATE FUNCTION GetSnackCodes (
      @myValues SnackCode
    )
    RETURNS @SnacksCodes TABLE (
           mySnackCoded int NULL
    )
    AS
    BEGIN 
        insert into @SnacksCodes 
            select SnackID
            from Snack
            where Name In (select Name from @myValues)
    return ;
    END;
    GO
    

    【讨论】:

      【解决方案2】:

      您可以拆分逗号分隔值并将其存储在临时表中,然后将该表值结果传递给查询

      【讨论】:

      • 请添加示例
      猜你喜欢
      • 2014-01-24
      • 2014-06-02
      • 2016-02-03
      • 2018-10-12
      • 2016-02-03
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多