I am trying to use a dynamic field for my Database.Upsert command as follows:

String extField = objVariable + fieldVariable;
Database.UpsertResult[] up = Database.upsert(toUpsert, extField);

This however returns the following error:

Method does not exist or incorrect signature: void upsert(List, String)

How can I resolve this?


2 Answers 2


The signature of Database.upsert() is

public static Database.UpsertResult[] upsert(sObject[] recordsToUpsert, Schema.SObjectField externalIdField, Boolean allOrNone)

While the Boolean parameter is optional, you must provide a value of type Schema.SObjectField for the second parameter.

You can obtain such values dynamically via the Describe API given string input:

String myFieldName = 'Account';
String myObjectName = 'Name';

Schema.SObjectField f = Schema.getGlobalDescribe().get(myObjectName).getDescribe().fields.getMap().get(myFieldName);

You can use a literal field reference (SObjectField):

Sobject[] records = new Account[] { new Account(Name='Test',Industry='Technology',ExtId__c='12345')};
SObjectField field = Account.ExtId__c;
Database.upsert(records, field);

You can't use a normal String field, because it doesn't exist as an option.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.