Использование SQLBulkCopy для вставки / обновления базы данных - PullRequest
9 голосов
/ 09 ноября 2009

У меня есть таблица данных с записями. Я вставляю записи в таблицу Sql с помощью SqlBulkCopy. Работает нормально. В следующий раз, когда получают данные с одинаковыми записями с несколькими измененными значениями, SqlBulkCopy вставляет другой набор записей без обновления предыдущего. подробнее. Как я могу обновить таблицу Sql, используя SqlBulkCopy? Пожалуйста, помогите.

Спасибо, Vix

Ответы [ 4 ]

15 голосов
/ 09 ноября 2009

SqlBulkCopy используется только для вставки записей, а не для обновления их, как объяснено здесь . Вам нужно будет использовать другую технику для массовых обновлений.

например. Вы можете SqlBulkCopy в промежуточную таблицу, а затем запустить SQL для обновления оттуда до основной таблицы.

3 голосов
/ 09 ноября 2009

Обрежьте таблицу и выполните Bulkcopy.

2 голосов
/ 06 ноября 2013

Избегайте усеченной таблицы и создайте новую временную таблицу, которая, кстати, занимает больше места и памяти.

Я создал триггер с INSTEAD OF INSERT и использую внутри оператора MERGE.

Но не забудьте добавить параметр SqlBulkCopyOptions.FireTriggers в SqlBulkCopy.

Это мои два цента.

0 голосов
/ 11 марта 2016

Как уже упоминалось в AdaTheDev, SqlBulkCopy можно вставлять только при наличии альтернативной библиотеки, которая позволяет выполнять операции Upsert.

Отказ от ответственности : я владелец проекта Массовые операции

В библиотеке Bulk Operations есть метод " BulkMerge ", который вставляет или обновляет строки на основе указанного ключа.

var bulk = new BulkOperation(connection);

bulk.ColumnMappings.Add("ID", true);
bulk.ColumnMappings.Add("Column1");
bulk.ColumnMappings.Add("Column2");
bulk.ColumnMappings.Add("Column3");

bulk.BulkMerge(dt);
...