向sql函数传递多个参数

Posted

技术标签:

【中文标题】向sql函数传递多个参数【英文标题】:Pass multiple parameters to sql function 【发布时间】: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

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

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

【问题讨论】:

【参考方案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】:

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

【讨论】:

请添加示例

以上是关于向sql函数传递多个参数的主要内容,如果未能解决你的问题,请参考以下文章

怎么向selector传递多个参数?

在 ASP.NET MVC 中向控制器传递多个参数;此外,在 LINQ-to-SQL 中生成动态查询

深入解答11道Python基础面试题

是否可以使用“call”或“apply”将参数数组一次传递给多个函数?

什么步骤可以用post向网络传递多个参数

怎样向shell函数中传递有空格的字符串参数