У меня есть способ получить данные из существующей таблицы в базе данных как DataTable, и я хочу добавить новые строки в этот datatable, а затем использовать SQLBulkCopy, чтобы только массовая вставка вновь добавленных строк, а не уже существующие строки, мне нужно настроить это как-то или это только добавит новые строки?
var myDataTable = GetExistingTableDataAsDataTable();
// добавляем новые строки в myDataTable .....
using (var conn = new SqlConnection("Connection string"))
{
conn.Open();
using (var bulk = new SqlBulkCopy(conn))
{
bulk.DestinationTableName = myDataTable.TableName;
bulk.BatchSize = 1000;
foreach (var column in myDataTable.Columns)
{
bulk.ColumnMappings.Add(column.ToString(), column.ToString());
}
bulk.WriteToServer(myDataTable); //Do i need to add DataRowState.Added here?
bulk.Close();
}
conn.Close();
}
Используйте временную таблицу для bulk insert
. Затем запустите запрос для копирования новых строк, отфильтровывая дубликаты с предложением where
:
insert YourTable
(id, col1, col2, col3, ...)
select id
, col1
, col2
, col3
, ...
from TempTable t
where not exists
(
select *
from YourTable yt
where yt.id = t.id
)