Обработка ошибок SqlBulkCopy / продолжает ошибку

ngIf принимает выражение ( JavaScript-подобный фрагмент кода ). Это означает, что все, что написано между " ", уже находится в контексте Angular, и вам не нужно использовать {{ }}:

<div ng-if="task_detail.status == 'done'">
10
задан johnnyRose 22 November 2016 в 14:54
поделиться

2 ответа

SqlBulkCopy, has very limited error handling facilities, by default it doesn't even check constraints.

However, its fast, really really fast.

If you want to work around the duplicate key issue, and identify which rows are duplicates in a batch. One option is:

  • start tran
  • Grab a tablockx on the table select all current "Hash" values and chuck them in a HashSet.
  • Filter out the duplicates and report.
  • Insert the data
  • commit tran

This process will work effectively if you are inserting huge sets and the size of the initial data in the table is not too huge.

Can you please expand your question to include the rest of the context of the problem.

EDIT

Now that I have some more context here is another way you can go about it:

  • Do the bulk insert into a temp table.
  • start serializable tran
  • Select all temp rows that are already in the destination table ... report on them
  • Insert the data in the temp table into the real table, performing a left join on hash and including all the new rows.
  • commit the tran

That process is very light on round trips, and considering your specs should end up being really fast;

7
ответ дан 4 December 2019 в 00:26
поделиться

Примечание: это краткое изложение ответа Сэма с немного более подробной информацией

Спасибо Сэму за ответ. Я добавил это в ответ из-за ограниченного пространства для комментариев.

Исходя из вашего ответа, я вижу два возможных подхода:

Решение 1:

  • start tran
  • захватить все возможные значения "хэша" попаданий, выполнив "выберите хэш в таблице назначения, где хэш в (знач1, знач2, ​​...)
  • отфильтрует дубликаты и сообщит
  • вставьте данные
  • зафиксируйте транзакцию

решение 2:

  • Создайте временную таблицу для зеркалирования схема целевой таблицы
  • массовая вставка во временную таблицу
  • запуск сериализуемой транзакции
  • Получение повторяющихся строк: "выберите хэш из tempTable где tempTable.hash = destinationTable.hash "
  • отчет о повторяющихся строках
  • Вставьте данные во временную таблицу в таблицу назначения: "select * into destinationTable from temptable left join temptable.hash = destinationTable.hash, где destinationTable.hash имеет значение null"
  • зафиксировать tran

Поскольку у нас есть два подхода, все сводится к тому, какой подход самый оптимизированный? Оба подхода должны извлекать повторяющиеся строки и сообщать, в то время как второй подход требует дополнительных:

  • создание и удаление временной таблицы
  • еще одна команда sql для перемещения данных из временной таблицы в целевую
  • зависит от процента хеш-коллизии , он также передает много ненужных данных по сети

Если это единственные решения, мне кажется, что первый подход выигрывает. Что, вы парни, думаете? Спасибо!

1
ответ дан 4 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: