我第一次在SSIS中实现我的任务
我有4.5 gB的数据,我想上传到Sql Server 2008。 我的数据就像是4到6个数据表的组合,原始数据中没有主键。
包含多个信息表的一行
现在我需要将这些数据拆分到各自的表中。
我的数据就像这样
row1:col1,col2,col3 ........... col125
现在我必须在master表中插入一些列,如果我将记录插入到主表中,我必须获取最后一个插入的行ID并使用该id我必须插入原始数据的coloumns(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)
答案 0 :(得分:2)
我建议使用一个带有Dataflow的SSIS包,它只是将源文件上传到该文件的临时表版本中。此时,我的包将调用一个执行SQL任务,它将触发一个非常大的存储过程来完成你需要做的所有主/子工作。
如果性能不是非常重要,在存储过程中,创建一个游标来读取每一行,通过激动行,并执行插入表1.捕获scope_identity()值(在您的示例中为5)并使用该值以及要插入表2-6的其余列。泡沫,冲洗,重复。
更好的性能方法是对该数据执行基于集合的操作。这种模式需要更多技能才能实现,但完全可行。而不是游标,将所有行插入到表1中。要捕获所有插入的标识值,您需要将OUTPUT子句用于表变量之类的内容。此时,您在输入行之间有一个映射(第1行=第5行,第2行=第6行等),并且可以在基于游标的方法中执行相同的插入,除非您使用列而不是变量。
如果您绝对必须全程使用SSIS,那么您表示哀悼。可以在那里应用光标模式,具有类似的性能结果。而不是加载到临时表,而是加载到数据流中的object类型的SSIS变量。在包中创建126或任何变量,然后shred the recordset