За кулисами, я считаю, что Microsoft CRM использует обновление SQL для всех атрибутов из набора свойств, которые не равны NULL. Вы также можете включить опции для перезаписи пустых значений.
Это звучит как типичный дельта-процесс. Я дам совет о двух лучших способах решения этой проблемы, которые я видел в Microsoft CRM -
(Наиболее эффективный) Если вы можете подключить некоторые триггеры / плагины к внешнему источнику для распространения изменений в реальном времени в промежуточную базу данных, которая содержит тип изменения (вставка / обновление / удаление), тогда выполняйте ночную синхронизацию который обрабатывает таблицу (помечает затронутые записи статусом) и помещает каждую строку в CRM. После завершения отправки изменений в CRM он может удалить все дельта-строки из промежуточной базы данных, которые были помечены как обработанные.
(если push-уведомление в реальном времени недоступно) Если исходная система является системой записи всех данных, вам потребуется прочитать все значения из Microsoft CRM (можете сделать это напрямую или загрузить их во временную базу данных, если вы хочу сохранить нагрузку на CRM). Во время чтения у вас должен быть идентификатор для записей, чтобы отслеживать их до исходных данных. Когда вы сравниваете каждое значение с исходной базой данных, записывайте любые различия в промежуточную таблицу с типом различий (вставка / обновление / удаление). После создания промежуточной базы данных дельты обработайте все эти записи в CRM так же, как в части 1.