【发布时间】:2009-11-09 11:36:39
【问题描述】:
我有一个包含记录的数据表。我正在使用 SqlBulkCopy 将记录插入到 Sql 表中。它工作正常。下一次获取具有相同记录且更改值很少的数据表时,SqlBulkCopy 正在插入另一组记录而不更新以前的记录详细信息。如何使用 SqlBulkCopy 更新 Sql 表?请帮忙。
谢谢, 波动率
【问题讨论】:
标签: asp.net sqlbulkcopy
我有一个包含记录的数据表。我正在使用 SqlBulkCopy 将记录插入到 Sql 表中。它工作正常。下一次获取具有相同记录且更改值很少的数据表时,SqlBulkCopy 正在插入另一组记录而不更新以前的记录详细信息。如何使用 SqlBulkCopy 更新 Sql 表?请帮忙。
谢谢, 波动率
【问题讨论】:
标签: asp.net sqlbulkcopy
SqlBulkCopy 仅用于插入记录,而不是按照here 的说明更新它们。您需要使用不同的技术来进行批量更新。
例如您可以将 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);
【讨论】: