4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UiPath】データテーブルに主キーを設定しておくと、データ テーブルをマージ (Merge Data Table) で重複したキーのレコードがマージされない

Posted at

データ テーブルをマージ (Merge Data Table) は2つのデータテーブルを行方向に結合するアクティビティです。
より正確にはターゲット (Destination) のデータテーブルに、ソース (Source) のデータテーブルの行を追加するという動きになります。

本題です。
データテーブルに主キー (Primary Key) が設定されていて、
かつ、ターゲットとソースで重複する主キーが存在する場合にマージを行うと、
重複するレコードについて、ターゲット側が残り、ソース側は挿入されない、という挙動になります。
以下で実際に動きを見てみます。

主キーを設定していない場合

image.png
①テーブル1を構築。
②テーブル2を構築。
③テーブル1にテーブル2をマージ。
④テーブル1の内容をログ出力。
という処理になります。
テーブル1とテーブル2の内容、及び実行結果については以下参照ください。

  • テーブル1
    image.png
  • テーブル2
    image.png
  • 実行結果
    image.png

シンプルにテーブル1にテーブル2の行が追加された形になりますね。

主キーを設定した場合

image.png
基本的な処理とテーブルの内容は「主キーを設定していない場合」と同じですが、
テーブル1を構築した後に、テーブル1の項目"ID"に主キーを設定しています。

  • 実行結果
    image.png

"ID"が重複しているテーブル2の一行目のレコードが挿入されていません。
また、"ID"=2(りんご)の価格が150(テーブル1のもの)となっていることから、
テーブル2のレコードで上書きされたわけではなく、テーブル1のレコードが残っているということがわかります。

オマケ

image.png
とはいえ"ID"=2 のレコードはRowStateがModifiedになっているので一応編集された扱いなのか…?

一意の制約を設定した場合

image.png
「主キーを設定していない場合」と同じ処理ですが、
今度はデータテーブルを構築する際に、テーブル1の項目"ID"に一意の制約(ユニークキー)を設定しています。

  • 実行結果
    image.png

この場合は制約違反でエラーになります。
ユニークキーと主キーは違うということですね。

動作環境

UiPath.System.Activities 21.10.4

参考

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?