从 CSV 文件批量插入 - 跳过重复项

2023-12-23

更新:最终使用了 Johnny Bubriski 创建的这个方法,然后对其进行了一些修改以跳过重复项。效果就像一个魅力,而且速度显然相当快。 关联:http://johnnycode.com/2013/08/19/using-c-sharp-sqlbulkcopy-to-import-csv-data-sql-server/ http://johnnycode.com/2013/08/19/using-c-sharp-sqlbulkcopy-to-import-csv-data-sql-server/

我一直在寻找这个问题的答案,但似乎找不到。我正在执行 T-SQL 批量插入,将数据从 csv 文件加载到本地数据库的表中。我的声明如下:

BULK INSERT Orders
FROM 'csvfile.csv'
WITH(FIELDTERMINATOR = ';', ROWTERMINATOR = '0x0a', FORMATFILE = 'formatfile.fmt', ERRORFILE = 'C:\\ProgramData\\Tools_TextileMagazine\\AdditionalFiles\\BulkInsertErrors.txt')
GO

SELECT * 
FROM Orders
GO

当我尝试插入重复行(例如两次获取相同的 csv 文件)时出现异常,这会导致整个插入停止并回滚。很容易理解,因为我违反了主键约束。现在我只是显示一个消息框,让用户知道 csv 文件中存在重复项,但这当然不是一个正确的解决方案,实际上根本不是一个解决方案。我的问题是,有没有办法忽略这些重复的行并跳过它们并仅添加不重复的行?也许以某种方式尝试捕获?

如果不可能,从 csv 文件导入数据的“正确”(由于缺乏更好的词)方法是什么?这个异常给我带来了一些麻烦。我确实在某处读到,您可以设置一个临时表,将数据加载到其中,并在插入之前在两个表之间选择不同的值。但真的没有更简单的方法来实现批量插入吗?


您可以设置MAXERRORS属性设置为相当高,这将允许插入有效记录并忽略重复项。不幸的是,这意味着数据集中的任何其他错误都不会导致加载失败。

或者,您可以设置BATCHSIZE属性将在多个事务中加载数据,因此如果存在重复项,它只会回滚批次。

一种更安全但效率较低的方法是将 CSV 文件加载到一个单独的空表中,然后将它们合并到您提到的订单表中。就我个人而言,这就是我会这样做的方式。

这些解决方案都不是理想的,但我想不出一种忽略批量插入语法中的重复项的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 CSV 文件批量插入 - 跳过重复项 的相关文章

随机推荐

  • 单调的堆栈和队列。定义和例子

    到底什么是单调堆栈 例如 它与单调队列有何不同 例如 考虑以下整数数组 0 2 1 3 4 如果我从左到右处理这个数组并将其插入到单调递减的堆栈中 我应该在堆栈中看到什么 为什么 Here http www leetcode solutio
  • Nginx 具有不同根的多个位置

    我的 nginx 配置非常简单 里面有 3 个位置 他们每个人都有自己的根目录 我将来应该能够轻松添加另一个根目录 我想要的是 Request admin gt 位置 admin Request admin gt 位置 admin Requ
  • 无法将不可变值作为 inout 参数传递:函数调用返回不可变值

    我分叉了这个项目 所以我不太熟悉所有细节 https github com nebs hello bluetooth blob master HelloBluetooth NSData 2BInt8 swift https github c
  • 如何使数据类更好地与 __slots__ 配合使用?

    It 已决定 https github com ericvsmith dataclasses issues 28删除对的直接支持 slots 来自 Python 3 7 的数据类 尽管如此 slots 仍然可以与数据类一起使用 from d
  • 将 TextField 绑定到 ReadOnlyDoubleProperty

    我可以绑定一个TextField的文本属性为DoubleProperty 像这样 textField textProperty bindBidirectional someDoubleProperty new NumberStringCon
  • 将数据插入 SQL Server 返回错误代码 00q

    首先 我的代码的最大部分是在几周前工作的 与此同时 我们从 MySQL 服务器更换为 SQL 服务器 并且对架构设计进行了一些更改 我使用 Percobol 据我所知 它使用 OpenCobol 编译器 PERFORM 2010 GEBRU
  • Dynamic_cast<> 是否仅限于沿着继承层次结构进行直接转换?

    CODE struct A virtual details there but left out struct B virtual details there but left out struct C A B virtual detail
  • WaitHandle.WaitAll 64 个句柄限制的解决方法?

    我的应用程序通过以下方式生成不同的小工作线程负载ThreadPool QueueUserWorkItem我通过多个跟踪ManualResetEvent实例 我用WaitHandle WaitAll方法阻止我的应用程序关闭 直到这些线程完成
  • 如何向 RCpp 中的数据框添加新列?

    我正在尝试使用 RCpp 向数据框添加新列 在下面的代码中 我打算向数据框 df 添加一个 结果 列 但运行代码后数据集没有 结果 列 你能告诉我他们出了什么问题吗 R 文件调用 AddNewCol 函数 library Rcpp sour
  • 如何在 Perl 中将数组转换为散列?

    我有一个数组 并尝试将数组内容转换为带有键和值的哈希值 索引 0 是键 索引 1 是值 索引 2 是键 索引 3 是值 依此类推 但它没有产生预期的结果 代码如下 open FILE message xml die Cannot open
  • 初始拒绝后使用 getUserMedia() 重新提示权限

    在被拒绝一次后 我们如何使用 getUserMedia 请求相机 麦克风访问权限 我正在使用 getUserMedia 来访问用户的相机并将数据通过管道传输到画布 那一点一切都很好 在测试中 我点击了一次拒绝 此时 在 Chrome 和 F
  • 如何伪造Time.now?

    最好的设置方法是什么Time now为了在单元测试中测试时间敏感的方法 我真的很喜欢Timecop https github com travisjeffery timecop图书馆 您可以以块形式进行时间扭曲 就像时间扭曲一样 Timec
  • 如何从特定模块创建所有装饰函数的向量?

    我有一个文件main rs和一个文件rule rs 我想定义函数rule rs将被纳入Rules rule矢量 而不必将它们一一推动 我更喜欢一个循环来推动它们 main rs struct Rules rule Vec
  • 错误 1054。Insert 子句中的未知列

    我有这个问题 如果我编写以下查询 INSERT INTO prodotto Barcode InseritoDa DataInserimento UrlImage VALUES vfr ff 12 10 2012 vfr jpg 我收到此错
  • 自定义弹出菜单(布局)

    我正在尝试升级我的 PopupMenu 以便它带有图标和自定义样式 我为它创建了一个新的布局
  • 位置无关可执行文件的正确 Xcode 设置是什么

    最近刚刚开始收到一封应用商店提交后的电子邮件 其中包含以下建议 请确保您的构建设置已配置为创建 PIE 可执行文件 然而 XCode 中的设置看起来是正确的 在链接部分我发现 不创建位置无关的可执行文件 设置为 否 双重否定YUK 您收到此
  • Android排序数组

    我如何按日期或名称对该数组进行排序 String datetable new String 21 2 datetable 0 0 2011 01 01 datetable 0 1 Name1 datetable 1 0 2011 01 03
  • 为什么宽度/高度不适用于非定位伪元素?

    我想设置一个width of before伪元素达到80 如果我使用定位 那么一切都会正常 但如果我不使用它 那么一切都会失败 你能解释一下为什么百分比宽度在没有定位的情况下不起作用吗 如果可以的话 请添加一些对规范的引用 position
  • jQuery 方法链接是流畅编程的一个例子吗?

    我对 JavaScript jQuery 有点陌生 但是当我看到方法链接的示例时 我立即感到熟悉 其他接口 如 LINQ 执行类似的操作 其中一组方法的返回类型与它们所操作的类型相同 TweetSharp 执行的操作非常类似 这是流畅编程的
  • 从 CSV 文件批量插入 - 跳过重复项

    更新 最终使用了 Johnny Bubriski 创建的这个方法 然后对其进行了一些修改以跳过重复项 效果就像一个魅力 而且速度显然相当快 关联 http johnnycode com 2013 08 19 using c sharp sq