SQL Server .NET SqlBulkCopy类在异常后继续运行

.net bulkinsert exception-handling sqlbulkcopy sql-server

我用SqlBulkCopy插入大量数据。数据源可能有一些重复的行。我是目的地表,我有一个唯一性索引。

当出现第一个重复行时,SqlBulkCopy会抛出异常并回滚内部事务。我希望它忽略异常并继续插入。 (仅当异常行为重复行时)。

关于这个问题有一些问题,但他们都在寻找报告重复的行,我只是不关心它们。

一般承认的答案

这是与SqlBulkCopy的权衡之一 - 当我知道我有干净的数据时,我会使用它。如果您需要能够在没有干净数据的情况下很好地处理错误,那么其他方法“更好”(尽管性能有所不同)。

继你的另一个问题之后,SqlDataAdapter方法会给你这种能力,因为你可以设置一个ContinueOnError属性,允许进程在发生这样的错误时继续 - 非常方便。当我需要处理来自.NET的不那么干净/可能有问题的数据时,我使用这种方法。但是,正如我之前链接的那样,您将看到一个性能成本。

如果您想要绝对性能并满足保持分离的原始要求,那么您应该在将数据加载到数据库之前重复数据删除。或者使用TomTom建议的方法


热门答案

在进行批量插入之前解决问题。批量插入是专门定义为不处理这样的东西。为此,它将SQL Server置于某种批量插入模式,这种模式更快......但是有局限性。在插入之前,所有关键违规都必须是handeld。

你想做的是插入一个临时表(允许双打),然后将MERGE插入主表(使用MERGE命令)。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因