Класс SqlBulkCopy, предложенный santiiii, очень эффективен, но создает незарегистрированную операцию. Я должен был сделать это один раз, но моя целевая база данных участвовала в репликации, поэтому мне нужно было полностью зарегистрировать операцию. По сути, в итоге я выбрал набор данных из исходной базы данных.
Select * from SourceDatabaseTable where (some clause to get the right records)
Затем создайте пустой набор данных из таблицы назначения с помощью этого оператора
Select * from DestinationDatabaseTable where 1<>1
Тогда у меня было два набора данных. Первый с записями, которые я хотел скопировать, а второй - пустой. Затем я просто сделал вложенный цикл foreach, чтобы скопировать записи из одного набора данных в другой. Вот псевдокод для функции копирования ядра:
foreach(datarow sourcedr in sourcetable)
{
datarow destdr = destdatatable.createrow();
foreach(datacolumn in sourcedatatable)
{
destdr[datacolumn]=Sourcedr[datacolum];
}
}
Наконец, я просто использовал адаптер данных для отправки изменений в базу данных назначения.