2

ストアド プロシージャで名前が動的な変数を設定しようとしています。

DECLARE @var01 varchar(50)  
DECLARE @var02 varchar(50) 
...
DECLARE @var30 varchar(50)
DECLARE @sql = varchar(max) 

DECLARE @loopcnter INT      

-- (Inside some loop where the loopcounter increments each iteration)
...
SET @sql = 'SET @var0'+CAST(@loopcntr AS Varchar)+'= '''+'somevalue'+''''
-- e.g.) SET @var01= 'somevale'
EXEC (@sql)

変数が動的SQLのスコープとは異なるスコープで宣言されているため、これは機能しません。

この方法で変数を動的に設定する正しい方法は何ですか?

4

3 に答える 3

0

コメントで、割り当てられた値をテーブルに挿入するためだけに一連の変数を割り当てていると言っているので、変数を完全に回避するアプローチを使用できます。すべての値を一時テーブルまたはテーブル変数に挿入し、数値インデックスを指定してから、値の列をピボットし、結果の行をターゲット テーブルに挿入できます。したがって、次のようなものです。

DECLARE @values TABLE (Ind int IDENTITY(1,1), Value varchar(50));

INSERT INTO @values
SELECT ...
;

INSERT INTO TargetTable (Col1, Col2, ..., Col30)
SELECT [1], [2], ..., [30]
FROM @values
PIVOT (
  MAX(Value) FOR Ind IN ([1], [2], ..., [30])
) AS p
;

コメントで言及しているカーソルを回避するような方法ですべてを行う可能性もあると思います。

于 2013-11-05T07:12:52.117 に答える
0

パラメータを渡すことができるストアド プロシージャ sp_executesql を使用することもできます。追加のテーブルを使用して変数を格納することをお勧めしますが。

于 2013-11-04T19:20:16.400 に答える