在插入或更新方案中,SQL Server批量插入/更新与MERGE

时间:2010-09-24 12:57:07

标签: c# asp.net sql-server merge bulkinsert

我需要找到使用sql server和asp.net在数据库中插入或更新数据的最佳方法。如果数据存在则是标准方案,如果没有插入则更新。我知道这里有很多话题,但没有人回答我需要知道的事情。

所以我的问题是,当您更新/插入5k - 10k行但50k及更多行时确实没有问题。

我的第一个想法是使用sql server 2008 MERGE命令,但如果它是50k +行,我会考虑一些性能。此外,我不知道我是否可以基于主id键(int)而不是表中的其他唯一键来这种方式。 (确切地说,产品序列号不会随时间变化)。

我的第二个想法是首先获取所有产品系列,然后将新数据序列与之比较,并将其划分为数据以插入和更新数据,然后只进行一次批量插入和一次批量更新。

我只是不知道哪个更好,用MERGE我不知道性能是什么,它只受sql server 2008支持,但看起来很简单,第二个选项不需要sql 2008年,批次应该很快,但首先选择所有连续出版物并根据它们进行划分可能会有一些性能损失。

您有什么看法,选择什么?

2 个答案:

答案 0 :(得分:5)

更好地合并性能方式因为“MERGE语句最重要的优点之一是所有数据只被读取和处理一次”

您不需要主键,您可以加入一个或多个字段,使您的记录变得独一无二

答案 1 :(得分:2)

如您所述,在序列号上执行合并应该没有问题。在使用Optimizing MERGE Statement Performance时,您可能需要阅读MERGE以获取Microsoft建议的最佳做法。