Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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# 在Microsoft Sql Server数据库中将信息从平面表传播到规范化表的快速方法_C#_Sql Server_Database_Bulkinsert - Fatal编程技术网

C# 在Microsoft Sql Server数据库中将信息从平面表传播到规范化表的快速方法

C# 在Microsoft Sql Server数据库中将信息从平面表传播到规范化表的快速方法,c#,sql-server,database,bulkinsert,C#,Sql Server,Database,Bulkinsert,因此,我们面临着这些问题,我们正努力尽可能有效地解决这些问题: 从excel文件导入数据(130+k行) 将其加载到Sql Server数据库的给定表中 将该表中的数据分散(标准化)到其他6个表中 到目前为止,我们已经设法解决了前两个问题。 我们借助Excel数据读取器库访问文件中的数据,绑定并批量插入加载的数据 使用EntityFramework.BulkInsert。到目前为止,该过程所需时间不到2分钟,仅略多于130k行,这是可以接受的。 当我们试图规范化服务器上加载的表中的数据时,就会出

因此,我们面临着这些问题,我们正努力尽可能有效地解决这些问题:

  • 从excel文件导入数据(130+k行)
  • 将其加载到Sql Server数据库的给定表中
  • 将该表中的数据分散(标准化)到其他6个表中
  • 到目前为止,我们已经设法解决了前两个问题。
    我们借助Excel数据读取器库访问文件中的数据,绑定并批量插入加载的数据 使用EntityFramework.BulkInsert。到目前为止,该过程所需时间不到2分钟,仅略多于130k行,这是可以接受的。 当我们试图规范化服务器上加载的表中的数据时,就会出现大问题。
    数据库包含以前的信息,在更改过程中必须可以运行=>无表锁定。
    表有130列,包含分散在6个表中的信息。主记录保存其他5个的外键。
    数据库中可能已经存在或不存在其他记录。如果存在,则更新缺失的信息。
    对于我们来说,棘手的部分是在插入主实体时知道子实体的ID。逐行插入可以解决问题,但需要花费太多时间。
    我们希望使用某种大容量插入,但不确定如何保持记录之间的连接。 数据库设计是遗留的,不能对其进行重新组织。:)

    欢迎就这一问题提出任何工具、方法或建议:)


    提前感谢。

    什么标准化水平?不低于第三标准形式。不适用于EF。ORM完全不适合ETL作业。ETL不过是纯粹的数据操作。将数据加载到暂存表中,然后执行查询以读取所需的数据并将其插入到目标表中。或者使用SSI从源读取数据并动态操作数据流,例如使用“多播”步骤将一行发送到多个表,只存储每个表中所需的列。可以使用“查找”步骤执行键查找什么版本的SQL Server?如果您可以尝试SQL Server 2008 R2