sqlbulkcopy, я хочу перезаписать текущие строки в базе данных - PullRequest
4 голосов
/ 31 января 2011

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

Однако я хочу перезаписать строку в базе данных, если 3 столбца в строке соответствуют.

Например, если у меня 5 столбцов

membernum дата зарегистрированного имени, адрес, город, штат

Так что, если membernum, dateregistered и name match совпадают, я хочу перезаписать строку.с данными из массовой вставки.В моей программе вся таблица базы данных не заполнена, и я считаю ее слишком большой, чтобы загрузить ее.

Using bcp As SqlBulkCopy = New SqlBulkCopy(SqlDataSource2.ConnectionString)

    bcp.DestinationTableName = "dbo.dashboardtasks"

    bcp.WriteToServer(table)

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

INSERT INTO [dashboardtasks] ([tour], [taskname], [deptdate], [tasktype], [desc], [duedate], [compdate], [comments], [agent], [compby], [graceperiod], [id])

Ответы [ 2 ]

6 голосов
/ 31 января 2011

В Митче указывает на функции массового копирования (SqlBulkCopy, bcp и BULK INSERT), которые обрабатывают только вставки, но не обновления.

Обычный подход к вашей проблеме - выполнить массовую загрузку в два (или более) шага - сначала вы используете массовые вставки для загрузки данных в промежуточную таблицу, а затем используете запрос для вставки / обновления записей в основной таблицы на основе данных в промежуточных таблицах, например:

INSERT INTO MyTable
(Column1, Column2, [etc...])
SELECT Column1, Column2, [etc...] 
FROM Test_Staging
WHERE [Some condition]

См. SQL SERVER - вставка данных из одной таблицы в другую таблицу для получения информации о том, как вставить в одну таблицу из другой таблицы - также возможно выполнить объединение в UPDATE, но я изо всех сил пытается найти хороший ресурс по этому вопросу.

3 голосов
/ 31 января 2011

SqlBulkCopy выполняет только массовые вставки (что является лишь одной из причин, по которой он быстр).

Вам потребуется использовать другой метод для массовых обновлений:

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

  • Использовать SSIS.

  • В SQL Server 2008 для этого есть инструкция MERGE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...