データ テーブルをマージ (Merge Data Table) は2つのデータテーブルを行方向に結合するアクティビティです。
より正確にはターゲット (Destination) のデータテーブルに、ソース (Source) のデータテーブルの行を追加するという動きになります。
本題です。
データテーブルに主キー (Primary Key) が設定されていて、
かつ、ターゲットとソースで重複する主キーが存在する場合にマージを行うと、
重複するレコードについて、ターゲット側が残り、ソース側は挿入されない、という挙動になります。
以下で実際に動きを見てみます。
主キーを設定していない場合
①テーブル1を構築。
②テーブル2を構築。
③テーブル1にテーブル2をマージ。
④テーブル1の内容をログ出力。
という処理になります。
テーブル1とテーブル2の内容、及び実行結果については以下参照ください。
シンプルにテーブル1にテーブル2の行が追加された形になりますね。
主キーを設定した場合
基本的な処理とテーブルの内容は「主キーを設定していない場合」と同じですが、
テーブル1を構築した後に、テーブル1の項目"ID"に主キーを設定しています。
"ID"が重複しているテーブル2の一行目のレコードが挿入されていません。
また、"ID"=2(りんご)の価格が150(テーブル1のもの)となっていることから、
テーブル2のレコードで上書きされたわけではなく、テーブル1のレコードが残っているということがわかります。
オマケ
とはいえ"ID"=2 のレコードはRowStateがModifiedになっているので一応編集された扱いなのか…?
一意の制約を設定した場合
「主キーを設定していない場合」と同じ処理ですが、
今度はデータテーブルを構築する際に、テーブル1の項目"ID"に一意の制約(ユニークキー)を設定しています。
この場合は制約違反でエラーになります。
ユニークキーと主キーは違うということですね。
動作環境
UiPath.System.Activities 21.10.4
参考