Я пытаюсь вставить огромное количество данных в SQL-сервер. Моя целевая таблица имеет уникальный индекс под названием «Хэш».
Я хотел бы заменить свою реализацию SqlDataAdapter на SqlBulkCopy. В SqlDataAapter есть свойство, называемое «ContinueUpdateOnError», если для него установлено значение «истина». Обновление (таблица) вставит все возможные строки и пометит строки ошибок свойством RowError.
Вопрос в том, как я могу использовать SqlBulkCopy для максимально быстрой вставки данных, при этом отслеживая, какие строки были вставлены, а какие нет (из-за уникального индекса)?
Вот дополнительная информация:
Процесс является итеративным, часто его повторяют по расписанию.
Исходная и целевая таблицы могут быть огромными, иногда миллионы строк.
Несмотря на то, что можно сначала проверить хэш-значения, для каждой строки требуется две транзакции (сначала для выбора хэша из целевой таблицы, а затем выполнения вставки). Я думаю, что в случае с adapter.update(table) быстрее проверить RowError, чем проверять совпадения хэшей для каждой строки.