Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将SQLBulkCopy的大型数据集编辑到SQL Server数据库中_C#_Sql_Sql Server_Csv - Fatal编程技术网

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

C# 将SQLBulkCopy的大型数据集编辑到SQL Server数据库中,c#,sql,sql-server,csv,C#,Sql,Sql Server,Csv,我有一个非常大(5000多万条记录)的数据集,我正在从旧的Interbase数据库导入新的SQL Server数据库 我目前的做法是: 从Interbase数据库获取csv文件(完成后,使用我在网上找到的名为“FBExport”的程序) 旧数据库的模式与新数据库不匹配(不在我的控制之下),因此现在我需要批量编辑某些字段,以便它们在新数据库中工作。这是我需要帮助的地方 编辑到正确的模式后,我使用SqlBulkCopy将新编辑的数据集复制到SQL Server数据库中 第3部分工作得非常快,诊断显示

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

我目前的做法是:

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

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

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

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

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

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

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

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

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

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

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

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

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


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

    这有点宽泛,因为它肯定会引起对正确技术的猜测,并且不会显示任何代码或错误。但是,我认为您走的是正确的道路。另一个选择是使用相同的方法创建临时数据库结构为csv并批量复制文件,然后通过sql进行操作。这也有其缺点,但取决于您的模式。这有点广泛,因为它肯定会引起对正确技术的猜测,并且不会显示任何代码或错误。但是,我认为您走的是正确的道路。另一种选择可能是创建一个与csv结构相同的临时数据库,并大容量复制文件,然后通过sql进行操作。这也有其缺点,尽管这取决于您的模式。