SQLBulkCopy 不复制主键
本文关键字:复制 SQLBulkCopy | 更新日期: 2023-09-27 18:34:56
使用 SQLBulkCopy 时处理主键冲突错误的最佳方法是什么
Violation of PRIMARY KEY constraint 'email_k__'. Cannot insert duplicate key in object 'lntmuser.email'.
(即,如果目标表中已存在该行(?
有没有办法跳过插入重复的行,或者必须事先检查和处理?
这是我目前使用的代码:
var conPro = tx_ProConStr.Text;
var conArc = tx_ArcConStr.Text;
var con = new SqlConnection {ConnectionString = conPro};
var cmd = new SqlCommand("SELECT * FROM dbo.email", con);
con.Open();
var rdr = cmd.ExecuteReader();
var sbc = new SqlBulkCopy(conArc) {DestinationTableName = "dbo.email"};
sbc.WriteToServer(rdr);
sbc.Close();
rdr.Close();
con.Close();
我通常最终对临时表执行大容量复制操作,然后使用常规 SQL 将数据从该表复制到目标表。这允许我执行"批量更新",以及处理这样的特殊情况(尽管我没有遇到这种特定需求(。
与直接批量复制相比,性能有所下降,但它仍然比执行 INSERT 快得多。
您可以调整源查询以排除重复项。 例如:
select distinct * from dbo.email
或者过滤每个pkcol
的第一个col1
:
select *
from (
select row_number() over (parition by pkcol order by col1) as rn
from dbo.email
) as SubQueryAlias
where rn = 1