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 = ? の場合の記述順など…。
よろしくお願い致します。