異なるDBテーブル間でデータ同期を行いたいです。
メインテーブルから削除されたデータをサブテーブルからも削除する方法を教えてください。
[DBテーブルによる置換] ロジックと [更新系SQL実行] のSQLパラメータを使用することで対応可能です。
以下にスクリプトの作成例を記載します。
■スクリプト例
■PostgreSQL(メインテーブル)
■SQL Server(サブテーブル)
■前提
メインテーブルに存在しないデータをサブテーブルからも削除します。
今回は ID が「002」と「004」のデータが該当します。
■作成手順
1.ツールパレットの [データベース] - [SQL Server] より、[テーブル読み取り] アイコンをスクリプトキャンパスに配置します。
2.プロパティにて、以下のようにサブテーブルのデータを読み取るよう設定します。
3.ツールパレットの [データベース] - [SQL Server] より、[更新系SQL実行] アイコンをスクリプトキャンパスに配置します。
4.プロパティにて以下のように設定します。
今回は、削除対象データ ID が動的となるため、SQL文の WHERE句の条件に SQLパラメータを使用します。
SQLパラメータは「?{ID}」と記述しています。
5.ツールパレットの [変換] - [基本] より、マッピングをスクリプトキャンパスに配置し、[テーブル読み取り]、[更新系SQL実行] とフローを繋ぎます。
6.マッピングをダブルクリックし、Mapperエディタを開きます。
7.ツールパレットの [文字列] - [変換] より、[DBテーブルによる置換] ロジックをレイヤ上に配置し、column[1](=ID) からマッピングリンクを引きます。
8.プロパティにて以下のように設定を行い、サブテーブルの ID がメインテーブルにも存在する場合は、name の値を出力し、存在しない場合は、サブテーブルの ID をそのまま返すようにします。
9.ツールパレットの [条件] - [文字列] より、[同じ] ロジックをレイヤ上に配置し、column[1](=ID) と [DBテーブルによる置換] ロジックからそれぞれマッピングリンクを引き、サブテーブル の ID と [DBテーブルによる置換] ロジックを通過後の値を比較します。
なお、比較結果は以下のようになります。
・サブテーブルの ID がメインテーブルにも存在する場合
⇒ID と 置換後のname を比較するため結果は「false」
・サブテーブルの ID がメインテーブルに存在しない場合
⇒ID と ID を比較するため結果は「true」
10.ツールパレットの [繰り返し] - [条件指定] より、[条件による抽出] ロジックをレイヤ上に配置し、
以下のようにマッピングリンクを繋いで、[同じ] ロジックの結果が「true」の場合の ID のみを抽出し、
[更新系SQL実行] の SQLパラメータに渡します。
11.スクリプトを実行し、サブテーブルからID が「002」と「004」のデータが削除されていることを確認します。
■参考情報
▼DataSpider Servista ヘルプ
・[更新系SQL実行]
・[DBテーブルによる置換]
URL:https://www.hulft.com/help/ja-jp/DataSpider/latest/help/ja/mapper/document/logic/convertByDB.html
▼DataSpider Cloud ヘルプ
・[更新系SQL実行]
・[DBテーブルによる置換]