将SQLBulkCopy的大型数据集编辑到SQL Server数据库中

本文关键字:SQL Server 数据库 编辑 SQLBulkCopy 大型 数据集 | 更新日期: 2023-09-27 18:29:17

我有一个非常大的(5000多万条记录)数据集,我正在将它从旧的Interbase数据库导入到新的SQL Server数据库中。

我目前的做法是:

  1. 从Interbase数据库获取csv文件(完成后,使用了我在网上找到的一个名为"FBExport"的程序)

  2. 旧数据库的模式与新数据库的模式不匹配(不在我的控制之下),所以现在我需要批量编辑某些字段,以便它们在新数据库中工作。这是我需要帮助的领域

  3. 在编辑到正确的模式后,我使用SqlBulkCopy将新编辑的数据集复制到SQL Server数据库中。

第3部分的工作速度非常快,诊断显示一次导入10000条记录几乎可以立即完成。

我目前对第2部分的(缓慢)方法是,我只是逐行读取csv文件,并查找相关信息(例如,csv文件的ID为XXX########,而新数据库为每个XXX和#######.ex2都有一个单独的列。csv文件通过字符串引用模型,但新数据库通过模型表中的ID引用),然后将新行插入本地表,然后在本地表变大后插入SqlBulkCopy

我的问题是:对于这个数据编辑步骤,什么是"最佳"方法(性能方面)?我想很可能有一种linq类型的方法,它会表现得更好吗?如果会的话,我该怎么做?

将SQLBulkCopy的大型数据集编辑到SQL Server数据库中

如果步骤#3的导入非常快,我会尝试创建一个临时数据库,其架构与旧数据库完全匹配,并将记录导入其中。然后,我会考虑向临时表中添加额外的列,您需要将XXX########拆分为XXX和##########。然后可以使用SQL将源列拆分为两个单独的列。同样,您可以使用SQL执行所需的任何基于ID的查找和更新,以确保记录关系继续正确。

一旦数据被处理成可接受的格式,就可以使用IDENTITY_insert ON将记录插入到最终表中,不包括所有遗留列/信息。

在我看来,在临时SQL数据库中执行此操作的主要优点是,您可以随时编写查询,以确保使用旧密钥的记录关系仍然与使用新数据库自动生成的密钥的记录正确相关。

当然,这是基于我在SQL中比在C#中更容易进行数据转换/验证。