Salesforceの自動採番項目はUPSERT処理の対象として選択できないみたいです。データローダ向けの話ですが、ヘルプページが用意されていました。Apexからでも同じ理由でエラーになるんだと思います。
実際に試してみました。まずは普通にテキスト型のNameだった場合です。
テストデータを1件用意して確認します。
検証コードはざっくりですがこんな感じ。
無事に更新されました。Upsert処理時にNameをキーに更新できることも確認できたと思います。
それではNameが自動採番型だった場合です。
Upsert処理は同じように実行します。
実行するとエラーになりました。
System.DmlException: Upsert failed. First exception on row 0 with id a0Gi000000R4Y36EAF; first error: MISSING_ARGUMENT, Name not specified: []
値が見つかりません。という感じのエラーだと思います。自動採番項目の値はUpsert時には認識されないのかもしれません。
この問題の解決方法についてですが、こちらのページで1つ紹介されていました。テキスト型項目を用意してワークフロールールなどで自動採番の値をセットする。・・数式のときでも利用する方法です。たぶん他に方法は無いんじゃないかなと思います。
意外と自動採番項目をUPSERTの対象にする機会ってなかったので、こういうルールがあることに気づきませんでした。オブジェクト構成を考える時には意識しておくと良さそうです。