我有一个包含记录的数据表。我正在使用 SqlBulkCopy 将记录插入到 Sql 表中。它工作正常。下一次获取具有相同记录且更改值很少的数据表时,SqlBulkCopy 正在插入另一组记录而不更新以前的详细信息。如何我可以使用 SqlBulkCopy 更新 Sql 表吗?请帮忙。
谢谢,维克斯
我有一个包含记录的数据表。我正在使用 SqlBulkCopy 将记录插入到 Sql 表中。它工作正常。下一次获取具有相同记录且更改值很少的数据表时,SqlBulkCopy 正在插入另一组记录而不更新以前的详细信息。如何我可以使用 SqlBulkCopy 更新 Sql 表吗?请帮忙。
谢谢,维克斯
SqlBulkCopy 仅用于插入记录,而不是按照此处的说明更新它们。您需要使用不同的技术来进行批量更新。
例如,您可以将SqlBulkCopy 复制到临时表中,然后运行一些SQL 以从那里更新到主表。
截断表并执行 Bulkcopy。
避免截断表并创建一个新的临时表,顺便说一句,这会消耗更多的空间和内存。
我使用 INSTEAD OF INSERT 创建了一个触发器并在 MERGE 语句中使用。
但不要忘记在 SqlBulkCopy 中添加参数 SqlBulkCopyOptions.FireTriggers。
这是我的两分钱。
就像 AdaTheDev 提到的,SqlBulkCopy 只能插入,但是有一个替代库允许执行 Upsert 操作。
免责声明:我是Bulk Operations项目的所有者
批量操作库有一个方法“ BulkMerge ”,它根据指定的键插入或更新行。
var bulk = new BulkOperation(connection);
bulk.ColumnMappings.Add("ID", true);
bulk.ColumnMappings.Add("Column1");
bulk.ColumnMappings.Add("Column2");
bulk.ColumnMappings.Add("Column3");
bulk.BulkMerge(dt);