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

时间:2013-08-28 15:55:06

标签: c# sql sql-server csv

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

我目前的做法是:

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

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

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

  4. 第3部分工作非常快,诊断显示一次导入10,000条记录几乎是立即完成的。

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

    我的问题是:这个数据编辑步骤的“最佳”方法(性能)是什么?我认为很可能采用linq类型的方法,表现得更好,如果有的话,我该如何去做呢?

1 个答案:

答案 0 :(得分:1)

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

一旦数据被按摩成可接受的格式,您就可以使用IDENTITY_INSERT ON将记录插入到最终表中,排除所有遗留列/信息。

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

基于我在SQL中进行数据转换/验证比在C#中更容易做到这一点。