none
SQL Server 2000 のDTS を SQL Server 2005 のSSIS へ移行 RRS feed

  • 質問

  • SQL Server 2000 から 2005 への移植作業を行っております。

    DTS で実現させていた処理があるのですが、パッケージのまま2005 に取り込むのではなく、

    SSIS上で新たに定義をしようと考えております。

    (現仕様)
    ○サーバーAのテーブルX1の全データをサーバーBのテーブルX2に転送する。
     但し、主キー項目が一致する場合は上書き(update)、一致しない場合は新規挿入(insert)とする。

    異なるサーバー間でのデータ転送は「OLE DB ソース」と「OLE DB 変換先」で、実現できそうなのですが、
    update/insert の切り替えの判定の設定がわかりません。

    ご存知の方、教えてください。

    よろしくお願いします。

     ==○==○==○==○==○==○==○==○==○==○==○==○==○==○==○==○==○==○==○==

    補足します。

    現在、逝去フローTAB上で

    サーバーAからの select 実行タスク(1)、select結果をサーバーBに insert/update する為のforeachループコンテナ(2)、

    また、(2)のループコンテナ内にサーバーBに、 select 結果と同一キーレコードを update するタスク(2-1)と、

    select 結果とキー重複を起こさないレコードのみを insert するタスク(2-2)を作成しました。

    また、変数"RecordSet" をスコープ=Package、データ型=Object で作成しました。

    (1)→全般.結果セット=完全な結果セット、結果セット.結果名=0、結果セット.変数名=User::RecordSet

    (2)→コレクション.Foreachループエディタ.Enumerator=Foreach ADO 列挙子、
        コレクション.ADO オブジェクト ソース変数=User::RecordSet、
        変数のマッピング.変数=User::RecordSet、変数のマッピング.インデックス=0~((1)のselect結果の列数-1)

    と設定したのですが、

    (2-1)、(2-2)の「パラメータマッピング」の記述がよくわかりません。
     例えば、select A, B, C, D from X1 で抽出した結果セットに対して、
      insert into X2(A, B, C, D) value(?, ?, ?, ?) where not exists(select A from X2 as sub where sub.A = ?) の場合や
      update X2 set B = ?, C = ?, D = ? where A = ? の場合の記述順など…。

    よろしくお願い致します。

    2010年8月2日 13:55