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

SQL Server.NET SqlBulkCopy类在异常后继续运行,.net,sql-server,exception-handling,bulkinsert,sqlbulkcopy,.net,Sql Server,Exception Handling,Bulkinsert,Sqlbulkcopy,我正在用SqlBulkCopy插入大量数据。数据源可能有一些重复的行。在目标表中,我有一个唯一性索引 当第一个重复行出现时,SqlBulkCopy抛出异常并回滚内部事务。我希望它忽略异常并继续插入。(仅当例外情况针对重复行时) 关于这个问题有一些问题,但他们都在寻找报表重复行,我只是不关心它们。在执行大容量插入之前解决这个问题。Bulk insert是专门定义为不处理这样的内容的。为此,它将SQL Server置于某种大容量插入模式,该模式更快。。。但也有局限性。插入前必须处理所有键冲突 您要做

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

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


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

在执行大容量插入之前解决这个问题。Bulk insert是专门定义为不处理这样的内容的。为此,它将SQL Server置于某种大容量插入模式,该模式更快。。。但也有局限性。插入前必须处理所有键冲突


您要做的是插入到暂存表中(允许双倍),然后合并到主表中(使用MERGE命令)。

在执行大容量插入之前解决此问题。Bulk insert是专门定义为不处理这样的内容的。为此,它将SQL Server置于某种大容量插入模式,该模式更快。。。但也有局限性。插入前必须处理所有键冲突


我想做的是插入到暂存表中(允许使用双倍),然后合并到主表中(使用MERGE命令)。

这是SqlBulkCopy的一个折衷方法-我在知道有干净的数据时使用它。如果您需要在没有干净数据的情况下很好地处理错误,那么其他方法“更好”(这是性能的折衷)

从您的另一个问题开始,SqlDataAdapter方法将为您提供此功能,因为您可以设置ContinueOnError属性,以便在发生类似错误时继续处理—非常方便。当我需要处理来自.NET的不太干净/可能有问题的数据时,我使用这种方法。但正如我之前链接到的,您将看到性能成本


如果您希望获得绝对性能,并满足保持独立的原始要求,则应在加载到数据库之前删除重复数据。或者使用TomTom建议的方法

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

从您的另一个问题开始,SqlDataAdapter方法将为您提供此功能,因为您可以设置ContinueOnError属性,以便在发生类似错误时继续处理—非常方便。当我需要处理来自.NET的不太干净/可能有问题的数据时,我使用这种方法。但正如我之前链接到的,您将看到性能成本


如果您希望获得绝对性能,并满足保持独立的原始要求,则应在加载到数据库之前删除重复数据。或者使用TomTom建议的方法

我将此评估为可能性。但我之所以使用SqlBulkCopy,是因为数据量实在太大,所以我需要将插入时间减到最少。这样做几乎会使它翻一番。但是你必须在批量复制的范围内工作。像几乎所有ETL解决方案一样,将数据加载到临时暂存表中。在那里擦洗它,然后将它合并到结束表中。我把它评估为可能性。但我之所以使用SqlBulkCopy,是因为数据量实在太大,所以我需要将插入时间减到最少。这样做几乎会使它翻一番。但是你必须在批量复制的范围内工作。像几乎所有ETL解决方案一样,将数据加载到临时暂存表中。在那里擦洗它,然后将它合并到结束表中。好的。因此,实际上无法在不影响其性能的情况下保持SqlBulkCopy运行。我应该结束这个问题吗?好的。因此,实际上无法在不影响其性能的情况下保持SqlBulkCopy运行。我应该结束这个问题吗?