我有一种方法从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();
}
答案 0 :(得分:1)
使用临时表格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
)