私はいくつかの集約されたデータがあります。それは私が何をしようとしているたくさんの列動的に生成された列名を使用してローカルテーブル変数を更新するにはどうすればよいですか?
のを持って
name asd colA ColB ColC X Y
-----------------------------------------------
...
George PJ Sp P B 14.8 56
George PJ Sp P C 11.4 43
...
-----------------------------------------------
と地元結果テーブル
declare @result table(
Name nvarchar(255),
SP_E_A int null,
SP_E_B int null,
SP_E_C int null,
SP_E_D int null,
SP_E_viso decimal(5,1) null,
...
--LOTS MORE COLUMN GOES AFTER
...
)
は次のとおりです。 更新文を動的に生成して実行する
例:
UPDATE TABLE @table SET SP_P_B = 56
は、だから私はこの
open cursor for *that result set*
declare @sql varchar(255) = 'UPDATE @table SET '[email protected]+'_'[email protected]+'_'[email protected]+'='+CONVERT(varchar,@Y);
exec (@sql)
を書いた私は
を得ているエラーは、 "@table" テーブル変数を宣言する必要があります。
execのように、@resultテーブルが存在しない別のセッションが開始されます。
どうすれば回避できますか?
だけで一時テーブルを使用するように変更します。 – Squirrel
@Squirrel @ local、globalまたはtempDbを使用する必要がありますか? – evictednoise
動的SQL文の内外でテーブル変数を渡すのは難しい場合があります。ここでの問題は、動的SQLが別のコンテキスト内で実行されることです。この[質問](http://stackoverflow.com/questions/4258798/pass-a-table-variable-to-sp-executesql)は、その問題を回避する方法を示しています。 –