1

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

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

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

4

2 回答 2

1

在进行批量插入之前修复问题。批量插入被特别定义为不处理这样的东西。为此,它将 SQL Server 置于某种更快的批量插入模式......但有局限性。所有密钥违规必须在插入之前处理。

我想要做的是插入临时表(允许双打),然后合并到主表中(使用 MERGE 命令)。

于 2010-11-08T15:12:09.773 回答
0

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

继您的另一个问题之后,SqlDataAdapter 方法将为您提供这种能力,因为您可以设置一个 ContinueOnError 属性,该属性将允许在出现此类错误时继续处理 - 非常方便。当我需要处理来自 .NET 的不太干净/可能有问题的数据时,我会使用这种方法。但正如我之前提到的,你会看到性能成本。

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

于 2010-11-08T15:27:22.333 回答