1

複数の varchar(4000) パラメータ (26 個) を受け入れるプロシージャがあります。

それぞれは、カンマで区切られた値の文字列です。

それらが渡されたら、各文字列を分割して一時テーブルに挿入し、後でプロシージャで使用できるようにします。

各パラメーターを個別に処理するステートメントを作成するのではなく、カウンターに依存して各パラメーターをループし、それぞれを順番に処理する 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 Using Table-Valued Parameters の Arrays and Lists を読むことをお勧めします。

于 2012-05-03T15:42:14.703 に答える