1

我有一个接受多个 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 -> @string26 的所有 CSV 的表。

FT_SPLIT_LIST 有效——我在许多其他地方使用它。我只需要知道是否有一种方法可以动态声明正在传递给它的参数?

有没有什么方法可以在不为每个 @string1->@string27 参数编写语句的情况下完成我想要完成的工作?

谢谢, C

4

1 回答 1

2

SQL Server 2008 及更高版本具有表值参数

表值参数是使用用户定义的表类型声明的。您可以使用表值参数将多行数据发送到 Transact-SQL 语句或例程(例如存储过程或函数),而无需创建临时表或许多参数。

这些是比逗号分隔的 varchars 和FT_SPLIT_LIST.

我建议阅读Erland Sommarskog 的使用表值参数的 SQL Server 2008 中的数组和列表,以全面讨论该主题。

于 2012-05-03T15:42:14.703 回答