我有一个带有记录的数据表。我使用SqlBulkCopy将记录插入到Sql表中。它工作正常。下一次获取带有相同记录的数据表时几乎没有更改的值SqlBulkCopy插入另一个时间记录集没有更新以前的细节。我怎样才能使用SqlBulkCopy更新Sql表?请帮忙。使用SQLBulkCopy来插入/更新数据库
感谢, Vix指数
我有一个带有记录的数据表。我使用SqlBulkCopy将记录插入到Sql表中。它工作正常。下一次获取带有相同记录的数据表时几乎没有更改的值SqlBulkCopy插入另一个时间记录集没有更新以前的细节。我怎样才能使用SqlBulkCopy更新Sql表?请帮忙。使用SQLBulkCopy来插入/更新数据库
感谢, Vix指数
SqlBulkCopy的仅用于插入记录,不更新他们的解释here。您需要使用其他技术来执行批量更新。
例如你可以将SqlBulkCopy放入临时表中,然后运行一些SQL从那里更新到主表。
截断表格并执行Bulkcopy。
for vix:截断,然后批量加载是最有效的过程,如果您只想要结果表只包含批量加载记录。 - upvoted – Chad 2009-11-09 13:34:50
对于一些简单的情况很好,但如果您正在更新的数据有任何复杂程度,这将是一个真正的痛苦。根据app/DB的具体情况,保持数据完整性可能非常困难。例如FK关系需要保留。 – MemeDeveloper 2012-10-20 03:40:26
避免截断表和创建一个新的临时表,BTW消耗更多的空间和内存。
我使用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);
+1的临时表,这正是你必须怎么做散装-插入更新和大量在同一表的更新,这是非常值得做的努力。 – 2009-11-09 11:53:46