2009-11-09 361 views
9

我有一个带有记录的数据表。我使用SqlBulkCopy将记录插入到Sql表中。它工作正常。下一次获取带有相同记录的数据表时几乎没有更改的值SqlBulkCopy插入另一个时间记录集没有更新以前的细节。我怎样才能使用SqlBulkCopy更新Sql表?请帮忙。使用SQLBulkCopy来插入/更新数据库

感谢, Vix指数

回答

15

SqlBulkCopy的仅用于插入记录,不更新他们的解释here。您需要使用其他技术来执行批量更新。

例如你可以将SqlBulkCopy放入临时表中,然后运行一些SQL从那里更新到主表。

+0

+1的临时表,这正是你必须怎么做散装-插入更新和大量在同一表的更新,这是非常值得做的努力。 – 2009-11-09 11:53:46

3

截断表格并执行Bulkcopy。

+0

for vix:截断,然后批量加载是最有效的过程,如果您只想要结果表只包含批量加载记录。 - upvoted – Chad 2009-11-09 13:34:50

+0

对于一些简单的情况很好,但如果您正在更新的数据有任何复杂程度,这将是一个真正的痛苦。根据app/DB的具体情况,保持数据完整性可能非常困难。例如FK关系需要保留。 – MemeDeveloper 2012-10-20 03:40:26

2

避免截断表和创建一个新的临时表,BTW消耗更多的空间和内存。

我使用INSTEAD OF INSERT创建了一个触发器,并在MERGE语句中使用。

但不要忘记在SqlBulkCopy中添加参数SqlBulkCopyOptions.FireTriggers。

这是我的两美分。

-1

和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); 
相关问题