【问题标题】:Flat File data to Multiple tables USING SSIS使用 SSIS 将平面文件数据传输到多个表
【发布时间】:2011-08-08 23:25:50
【问题描述】:

我第一次在 SSIS 中实现我的任务

我有 4.5 gB 的数据,我想上传到 Sql Server 2008。 我的数据是 4 到 6 张数据表的组合,原始数据中没有主键。

一行包含多个信息表

现在我需要将该数据拆分到相应的表中。

我的数据是这样的

row1: col1, col2, col3...........col125

现在我必须在主表中插入一些列,如果我将记录插入到主表中,我必须获取最后插入的行 ID 并使用该 ID 我必须插入原始数据的列(col5 到 col20 和依此类推)到另一个表中,如..

最后插入的行是 5

表 1 5、col2 5,col3 5、col4 5 ,col5 又要插入另一个表

表 3 5、col12 5,col32 5、col45 5 ,col55

表 4 5、col72 5 ,col82 5、col95 5 ,col105 和第一行一样。

任何人都可以建议我如何执行此任务。请参阅附件 (http://www.bidn.com/Assets/Uploaded-CMS-Files/fc8b892d-8652-4f0e-bdc6-56e297149315Table Extract.pdf)

【问题讨论】:

    标签: ssis


    【解决方案1】:

    我会建议一个带有数据流的 SSIS 包,它仅将源文件上传到文件的临时表版本中。那时,我的包将调用一个执行 SQL 任务,该任务将触发一个非常大的存储过程来完成您需要做的所有主/子工作。

    如果性能不是非常重要,在存储过程中,创建一个游标来读取每一行,通过痛苦的行,并执行插入到表 1 中。捕获 scope_identity() 值(在您的示例中为 5)并使用它其余列插入表 2-6。起泡、冲洗、重复。

    更好的性能方法是对该数据执行基于集合的操作。这种模式需要更多技巧才能实现,但完全可行。代替游标,将所有行插入到表 1 中。要捕获所有插入的标识值,您需要将OUTPUT 子句用于表变量之类的东西。此时,您在输入行(第 1 行 = id 5、第 2 行 = id 6 等)之间有一个映射,并且可以在基于游标的方法中执行相同的插入,除非您使用列而不是变量。

    如果您绝对必须全程使用 SSIS,我表示哀悼。可以在那里应用光标模式并获得类似的性能结果。不是加载到临时表,而是加载到数据流中对象类型的 SSIS 变量。在包中创建 126 或任何变量,然后 shred the recordset

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      相关资源
      最近更新 更多