尝试使用SSIS将特定场景中的数据从excel表插入4个表中,我有点失落。
我的Excel工作表的每一行都需要分成3个表。然后需要将标识列值插入第4个映射表以保存关系。如何使用SSIS 2008有效实现这一目标?
请注意,在下面的示例中,修正了col4和5都进入第3个表格。
这是数据示例
Excel中
col1 col2 col3 col4 col5
a b c d 3
a x c y 5
表1
PK col
1 a
2 a
表2
PK col1 col2
1 b c
2 x c
表3
PK Col
1 d
2 3
3 y
4 5
Map_table
PK Table1_ID Table2_ID Table3_ID
1 1 1 1
2 1 1 2
2 2 2 3
2 2 2 4
即使建议使用基于SQL的方法,我也没问题,因为我没有任何使用SSIS的任务。另外的挑战是,在表2中,如果存在相同的数据行,我想在映射表中使用该ID,而不是插入重复的行!
答案 0 :(得分:3)
多播是您正在寻找的组件。该组件接受输入源并将其输出为DUPLICATE。在这种情况下,您可以使用Excel源并复制流以将数据插入Table1,Table2和Table3。
现在,棘手的部分是将这些身份恢复到Map_Table中。要么您不使用IDENTITY并使用其他方法(如GUID,或您自己的增量计数器,您将在多播之前设置为派生列),或者使用@@IDENTITY
来检索最后插入的标识。对你来说,使用@@IDENTITY
对我来说听起来很痛苦,但这取决于你。如果数据不是很大,我会选择GUID。
@@IDENTITY
与BULK操作不兼容。它将仅检索创建的最后一个标识。另外,请记住我谈过@@ IDENTITY,但您可能希望使用IDENT_CURRENT('TableName')
来检索特定表的最后一个标识。 @@IDENTITY
检索会话中创建的最后一个标识,无论范围如何。您可以使用SCOPE_IDENTITY()
来检索范围内的最后一个身份。