Существует ли какая-либо команда BulkUpdate, аналогичная BulkCopy, в SQL Server 2008 - PullRequest
2 голосов
/ 14 января 2012

Я использовал команду BulkCopy для переноса строк из одной таблицы в другую с объемными данными от 3 до 5 миллионов строк. Я хочу обновить эти строки.

Существует ли какая-либо команда BulkUpdate, аналогичная команде BulkCopy? Я использую ASP.NET с C #.

Ответы [ 3 ]

4 голосов
/ 14 января 2012

Нет, нет.

Q: Что такое "лак"?

Это может помочь:

http://itknowledgeexchange.techtarget.com/itanswers/bulk-update-in-sql-server-2005/

Предполагая, что у вас есть столбец со значениями округа, чтобы показать вам, какие строки, которые между двумя таблицами это можно сделать с помощью простого обновить заявление.

UPDATE TableA
SET TableA.A1 = TableB.B1,
    TableA.A2 = TableB.B2  
FROM TableB  
WHERE TableA.A3 = TableB.B3

Если вы беспокоитесь о создании одной крупной транзакции, вы можете Пакетная операция на более мелкие куски. Это делается через ТОП ключевое слово.

UPDATE TOP (1000) TableA
SET TableA.A1 = TableB.B1,
    TableA.A2 = TableB.B2  
FROM TableB  
WHERE TableA.A3 = TableB.B3
      AND TableA.A1 <> TableB.B1
      AND TableA.A2 <> TableB.B2

Вы можете поместить это в цикл ...

Вот еще одна ссылка (в основном с тем же решением):

http://www.sqlusa.com/bestpractices2005/hugeupdate/

2 голосов
/ 14 января 2012

Общий подход здесь:

  • массовая загрузка (SqlBulkCopy) в пустую * промежуточную таблицу - это означает: таблица с правильными столбцами / типами в качестве фактических данных, но не является частью основной транзакционной системы
  • теперь выполните обновление, объединяющее реальные данные с промежуточными данными, чтобы обновить значения в реальных данных
0 голосов
/ 11 марта 2016

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

Библиотека массовых операций позволяет вставлять, удалять, обновлять и объединять миллионы строк внесколько секунд.

Его очень легко освоить и использовать, если вы уже знаете класс SqlBulkCopy.

var bulk = new BulkOperation(connection);
// ... Mappings ....

bulk.BulkUpdate(dt);
...