レコードの更新/挿入
upsert 操作を使用すると、既存のレコードの挿入または更新を 1 つのコールで実行できます。レコードがすでに存在しているかどうかを確認するために、upsert ステートメントまたはデータベースメソッドは、レコードの ID をキーとして使用し、idLookup 属性が true に設定されたレコード、カスタム外部 ID 項目、または標準項目と照合します。
- キーが一致しない場合、新規オブジェクトレコードが作成されます。
- キーが一度だけ一致したら、既存のオブジェクトレコードが更新されます。
- キーが複数回一致する場合は、エラーが生成され、オブジェクトレコードは挿入も更新もされません。
例
次の例では、以前 Bombay となっていた市に所在するすべての既存取引先の市の名前を更新し、さらに、San Francisco に所在していた新規取引先を挿入します。
次の例では、Database.upsert メソッドを使用して、渡されるリードのコレクションを更新/挿入します。この例では、レコードの部分処理を許可しています。つまり、一部のレコードが処理に失敗した場合でも、残りのレコードは引き続き挿入または更新されます。また、結果を反復処理して、正常に処理された各レコードに新しい ToDo を追加します。ToDo sObject は、リストに保存され、その後一括挿入されます。この例の後に、この例をテストするテストメソッドを含むテストクラスが続きます。
upsert を外部 ID と一緒に使用すると、コード内の DML ステートメントの数が減少し、ガバナ制限に該当しないようにします (「実行ガバナと制限」を参照)。この次の例では、納入商品と商談品目間の一���一の関係を維持するために、Asset オブジェクトの upsert と外部 ID 項目 Line_Item_Id__c を使用します。