尝试使用 SSIS 将特定场景中的数据从 Excel 工作表插入到 4 个表中时,我有点迷失了。
我的 Excel 工作表的每一行都需要分成 3 个表。然后需要将标识列值插入到第四个映射表中以保存关系。如何使用 SSIS 2008 有效地实现这一目标?
请注意,在下面的示例中,已修复 col4 和 5 都进入第三个表的情况。
这是数据示例
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 表
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,而不是插入重复的行!
最佳答案
多播是您正在寻找的组件。该组件采用输入源并将其复制为多个输出。在这种情况下,您可以拥有 Excel 源并复制流程以将数据插入到 Table1、Table2 和 Table3 中。
现在,棘手的部分是将这些身份返回到您的 Map_Table 中。您要么不使用 IDENTITY 并使用其他方式(例如 GUID,或者您自己的增量计数器,您将在多播之前将其设置为派生列),要么使用 @@IDENTITY
检索最后插入的身份。使用@@IDENTITY
对于你目前的情况来说,这对我来说听起来很痛苦,但这取决于你。如果数据不是那么大,我会选择 GUID。
@@IDENTITY
不适用于批量操作。它将仅检索最后创建的身份。另外,请记住我谈到了 @@IDENTITY,但您可能想使用 IDENT_CURRENT('TableName')
而是检索特定表的最后一个标识。 @@IDENTITY
检索在 session 中创建的最后一个身份,无论范围如何。您可以使用SCOPE_IDENTITY()
检索您范围内的最后一个身份。
关于sql - 在多个表中插入一行,并分别维护关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11470106/