[テーブル書き込み] 処理で「バッチアップデート・インサート」を実施したところ、一意制約違反のエラーが発生しました。
しかし、同様の入力データを使用して「アップデート・インサート」を実施した際にはエラーが発生しませんでした。
実行結果が異なるのは何故ですか。
■仕様説明
「アップデート・インサート」はヘルプに以下の記載がございますように、 対象のデータを 1件ずつ処理します。
------
[アップデート・インサート]:(デフォルト)
1行ごとにUPDATE文を実行し、キーの値と一致する行が存在しない場合はINSERT文を実行します。
------
対して、「バッチアップデート・インサート」はバッチサイズで指定した件数をまとめて処理します。
このため、同バッチ内に重複キーのデータが存在し、そのキーのデータが書き込み先のテーブルに存在しない場合、INSERT が実行されますが、INSERT 対象のデータのキー値が重複しているため、一意制約違反のエラーが発生します。
上記より、同バッチ内に重複キーのデータが存在する場合は、以下の対応策をご検討ください。
■対応策
1.アップデート・インサートモードを使用する。
2.バッチサイズを小さくする。
1バッチ内に重複キーが発生しないサイズを設定してください。
3. 入力データ内でキー重複が発生しないように入力データを作成する。
4. 中間テーブルなどを作成し、重複キーを除外した入力データをバッチアップデート・インサートする。