SqlBulkCopy, имеет очень ограниченные средства обработки ошибок, по умолчанию он даже не проверяет ограничения.
Тем не менее, это быстро, действительно очень быстро.
Если вы хотите обойти проблему дублирования ключа и определить, какие строки являются дубликатами в пакете. Один из вариантов:
- start tran
- Возьмите tablockx на таблицу, выберите все текущие значения "Hash" и добавьте их в HashSet.
- Отфильтровать дубликаты и отчитаться.
- Вставить данные
- commit tran
Этот процесс будет работать эффективно, если вы вставляете огромные наборы, а размер исходных данных в таблице не слишком велик.
Не могли бы вы расширить свой вопрос, включив в него остальную часть проблемы.
EDIT
Теперь, когда у меня есть больше контекста, вот еще один способ сделать это:
- Сделать массовую вставку во временную таблицу.
- запуск сериализуемого тран
- Выбрать все временные строки, которые уже находятся в таблице назначения ... сообщить о них
- Вставьте данные из временной таблицы в реальную таблицу, выполнив левое соединение с хешем и включив все новые строки.
- совершить транс
Этот процесс очень легок в поездках туда и обратно, и учитывая, что ваши спецификации должны быть очень быстрыми;