動的SQLを使用して変数の更新ステートメントを作成せずにこれを実行できるかどうかはわかりません。
このステートメントは、入力したテーブル名に基づいて列のリストを返します。
select name from syscolumns
where [id] = (select [id] from sysobjects where name = 'tablename')
ここでループを回避できるかどうかわからない....上からの結果をカーソルにロードしてから、そこからクエリを作成する必要があります。疑似コード化:
set @query = 'update [1607348182] set '
load cursor --(we will use @name to hold the column name)
while stillrecordsincursor
set @query = @query + @name + ' = tmp_[1607348182]. ' +@name + ','
load next value from cursor
loop!
クエリがループ内で構築されたら、execsp_executesql@queryを使用します。
ちょっとした警告...このようなループで動的SQLを構築すると、少し混乱する可能性があります。トラブルシューティングのために、select @queryをループに入れて、@queryがビルドされるのを確認してください。
編集:更新で1000行すべてを一度に実行できるかどうかわからない... @ queryも大きくなる可能性のあるサイズには論理的な制限(varchar(8000)?)があります。一度に50列を処理するように、コードを分割する必要がある場合があります。syscolumns selectステートメントの列をIDを持つ一時テーブルに配置し、動的SQLを構築して、一度に20列(または50?)を更新するようにします。
もう1つの方法は、Excelを使用してこれを大量に構築することです。列を選択して、結果をスプレッドシートの列aにコピーします。'=を列b、tmpに入れます。[12331312] 列cで、列aを列Dにコピーし、コンマを列eにコピーします。スプレッドシート全体をメモ帳にコピーすると、更新ステートメントの列が作成されます。これがワンショットイベントである場合、悪い解決策ではありません。進行中の解決策としてこれに依存するかどうかはわかりません。