gpt4 book ai didi

c# - SqlBulkCopy 错误处理/错误继续

转载 作者:可可西里 更新时间:2023-11-01 09:06:56 24 4
gpt4 key购买 nike

我正在尝试将大量数据插入 SQL Server。我的目标表有一个名为“Hash”的唯一索引。

我想用 SqlBulkCopy 替换我的 SqlDataAdapter 实现。在 SqlDataAapter 中有一个名为“ContinueUpdateOnError”的属性,当设置为 true 适配器时。Update(table) 将插入所有可能的行并使用 RowError 属性标记错误行。

问题是我如何使用 SqlBulkCopy 尽快插入数据,同时跟踪哪些行已插入,哪些行未插入(由于唯一索引)?

这里是附加信息:

  1. 该过程是迭代的,通常设置为重复的时间表。

  2. 源表和目标表可能很大,有时有数百万行。

  3. 尽管可以先检查散列值,但每行需要两个事务(首先从目标表中选择散列,然后执行插入)。我认为在 adapter.update(table) 的情况下,检查 RowError 比检查每行的哈希命中率更快。

最佳答案

SqlBulkCopy,具有非常有限的错误处理功能,默认情况下它甚至不检查约束。

但是,它很快,真的非常快。

如果您想解决重复键问题,并确定批处理中哪些行是重复的。一种选择是:

  • 开始翻译
  • 在表上抓取一个 tablockx 选择所有当前的“哈希”值并将它们放入哈希集中。
  • 过滤掉重复项并报告。
  • 插入数据
  • 提交交易

如果您要插入巨大的集合并且表中初始数据的大小不是太大,则此过程将有效地工作。

能否扩展您的问题以包括问题的其余上下文。

编辑

既然我在这里有了更多的上下文,您可以使用另一种方法:

  • 将批量插入到临时表中。
  • 开始序列化传输
  • 选择目标表中已有的所有临时行...报告它们
  • 将临时表中的数据插入到真实表中,对散列执行左连接并包括所有新行。
  • 提交交易

这个过程在往返过程中非常轻松,考虑到您的规范最终应该非常快;

关于c# - SqlBulkCopy 错误处理/错误继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com