将逗号分隔的值字符串传递给用户定义的函数:使用“IN”tsql运算符

时间:2011-05-16 08:22:26

标签: tsql

在TSQL(SQL SERVER 2008)中,如何传递-comma分隔符 - 字符串值列表 - 例如。 'gold,silver,copper'到用户定义的函数,指定varchar参数。

我意识到如果我在UDF中定义一个varchar参数说 获取列表'gold,silver,copper'的@commodityList,我无法使用IN运算符。即

SELECT * FROM Prodn where commodity in (@commodList).

我已经阅读了一些关于采用Table-Valued Paremeter方法的文章,但是我认为这条路径意味着将我的字符串分成块 - 以便插入表值参数,例如:

DECLARE @mylist commodity_list_tbltype

INSERT @mylist VALUES('gold'),('silver'),('copper')

我想知道是否有直接设置字符串参数的方法,并在UDF中使用SQL IN运算符。

干杯。

1 个答案:

答案 0 :(得分:2)

您可以创建用于将字符串拆分为表

的udf函数
CREATE FUNCTION [dbo].[fn_ado_param] (@ado nvarchar(4000), @Delim char(1)= ',')
RETURNS @VALUES TABLE (ado nvarchar(4000))AS
   BEGIN
   DECLARE @chrind INT
   DECLARE @Piece nvarchar(4000)
   SELECT @chrind = 1
   WHILE @chrind > 0
      BEGIN
         SELECT @chrind = CHARINDEX(@Delim,@ado)
         IF @chrind > 0
            SELECT @Piece = LEFT(@ado,@chrind - 1)
         ELSE
            SELECT @Piece = @ado
         INSERT @VALUES(ado) VALUES(@Piece)
         SELECT @ado = RIGHT(@ado,LEN(@ado) - @chrind)
         IF LEN(@ado) = 0 BREAK
      END
   RETURN
END

之后你可以在你的IN子句中使用它

select * from dbo.fn_ado_param('gold,silver,copper',',')

或在其他地方