将多个参数传递给sql函数

时间:2017-12-28 11:39:58

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

我有sql表,数据如下

SnackID        Name
   1         Chicken
   2         Soda
   3         Chocolate 
   4         IceCream 

我有以下用户定义的函数,它接受带有多个值的字符串的参数,如'Chicken','Soda'。

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

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

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

2 个答案:

答案 0 :(得分:4)

您的猜测是正确的 - 当您使用逗号分隔值传递单个字符串时,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

答案 1 :(得分:2)

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