Когда используется SqlBulkCopyColumnMapping, будут скопированы только столбцы, для которых созданы сопоставления.
Если вы не создадите отображение для столбца, оно будет проигнорировано процессом копирования.
Это можно увидеть в демонстрационном коде здесь - пример исходной таблицы в демонстрационной базе данных AdventureWorks содержит больше столбцов, чем сопоставлено или скопировано.
EDIT
Трудно быть уверенным без дополнительной информации о схеме базы данных, но, по-видимому, проблема заключается в следующем утверждении:
new SqlBulkCopyColumnMapping(c.ColumnName, c.ColumnName)
Судя по вашему описанию, не все столбцы в исходной таблице существуют в целевой таблице. Вам нужен фильтр в строительном цикле SqlBulkCopyColumnMapping
, чтобы пропустить все столбцы, которых нет в месте назначения.
Мой C # недостаточно хорош, чтобы привести пример, который, я уверен, сработает, но в псевдокоде это будет
foreach column c in sourcetable
{
if c.ColumnName exists in destination_table.columns
{
new SqlBulkCopyColumnMapping(c.ColumnName, c.ColumnName)
}
}
(я уверен, что можно преобразовать это в лямбда-выражение)
Обратите внимание, что это не особенно надежно в сценарии, где имена столбцов совпадают, но типы данных несовместимы.