我有一个接受多个varchar(4000)参数的程序(其中26个)。
每个都是以逗号分隔的值字符串。
一旦传入它们,我想将每个字符串分开并将它们插入临时表中,以便稍后在proc中使用。
我不想编写一个单独处理每个参数的语句,而是编写一个依赖于计数器的while循环来遍历每个参数并依次处理每个参数。目前,我已尝试过以下内容,但不正确。
CREATE PROCEDURE [dbo].[myproc] (
@string1 varchar(4000) = null;
@string2 varchar(4000) = null;
@string3 varchar(4000) = null;
....declare @string4 -> @string25...
@string26 varchar(4000) = null;)
CREATE TABLE #emails (
address varchar(80)
)
Set @counter = 1
WHILE @counter < 27
BEGIN
INSERT INTO #emails(address) SELECT element as address from FT_SPLIT_LIST(isNull('@string'+convert(varchar,@counter),''),',')
SET @counter = @counter +1
END
SELECT * FROM #emails
目前,这不会返回包含@ string1 - &gt;中所有CSV的表格。 @ string26。
FT_SPLIT_LIST有效 - 我在很多其他地方使用它。我只需要知道是否有办法动态声明传入的参数?
如果没有为每个@ string1-&gt; @ string27参数编写声明,有没有办法做我想要完成的事情?
谢谢, ç
答案 0 :(得分:2)
SQL Server 2008及更高版本具有table valued parameters:
使用用户定义的表类型声明表值参数。您可以使用表值参数将多行数据发送到Transact-SQL语句或例程(例如存储过程或函数),而无需创建临时表或许多参数。
这是比逗号分隔的varchars和FT_SPLIT_LIST
更好的选择。
我建议阅读Erland Sommarskog撰写的Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters,以便对该主题进行全面讨论。