1

複数のテーブルのデータを更新中です。現在、「sources」フィールドが 1 つあるテーブルがあります。これは、「itemid」フィールドを含むすべてのテーブルのリストです。「itemid」と「olditemid」の 2 つのフィールドを持つテーブルもあります。TSQL では、ソースを繰り返し処理し、その場で更新ステートメントを作成したいと考えています。これが私がやろうとしていたことですが、更新ステートメントで変数が宣言されていないというエラーが発生します。これが私がこれを行うべき正しい方法に近いかどうかはわかりません。アイデア?

DECLARE @tblName varchar(50)

DECLARE process_cursor CURSOR FOR 
    SELECT source 
    FROM tmpTableNames

OPEN process_cursor

FETCH NEXT FROM processcursor 
INTO @tblName

WHILE @@FETCH_STATUS = 0

    UPDATE @tblName 
        SET itemid = r.itemid 
        FROM @tblName v, itemref r
        WHERE r.olditemid = v.itemid

    FETCH NEXT FROM process_cursor
    INTO @tblName

END
CLOSE processcursor
DEALLOCATE processcursor
4

5 に答える 5

0

DECLARE @tblName varchar(50) を試しましたか? 私はそれができると思います。

于 2009-09-09T16:15:48.360 に答える
0

次のように、変数ベースの UPDATE ステートメント (つまり、UPDATE @tblName) を文字列にキャプチャして動的に実行しない限り、成功したことはありません。

EXEC 'UPDATE ' + @tblName + '
SET ItemId = (SELECT r.ItemId FROM itemref r WHERE r.OldItemId = ' + @tblName + '.itemId)'

テーブル TheTable の場合、これは次のように展開されます。

EXEC 'UPDATE TheTable
      SET ItemId = (SELECT r.ItemId FROM itemref r WHERE r.OldItemId = TheTable.ItemId)'
于 2009-09-09T16:26:37.770 に答える