在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运算符。
干杯。
答案 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',',')
或在其他地方