4

尝试使用 SSIS 将特定场景中的数据从 excel 表插入 4 个表时,我有点迷失了。

我的 excel 表的每一行都需要分成 3 个表。然后需要将标识列值插入到第 4 个映射表中以保存关系。如何使用 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

地图表

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,而不是插入重复的行!

4

1 回答 1

3

多播是您正在寻找的组件。该组件接受一个输入源并将其复制到尽可能多的输出中。在这种情况下,您可以拥有 Excel 源并复制流程以将数据插入 Table1、Table2 和 Table3。

现在,棘手的部分是将这些身份恢复到您的 Map_Table 中。要么您不使用 IDENTITY 并使用其他方式(如 GUID,或您自己的增量计数器,您将在多播之前将其设置为派生列),要么您使用@@IDENTITY检索最后插入的身份。对于您当前的情况,使用@@IDENTITY听起来对我来说很痛苦,但这取决于您。如果数据不是那么大,我会选择 GUID。

@@IDENTITY不适用于 BULK 操作。它将仅检索最后创建的身份。另外,请记住我谈到了@@IDENTITY,但您可能希望使用它IDENT_CURRENT('TableName')来检索特定表的最后一个身份。@@IDENTITY检索在会话中创建的最后一个身份,无论范围如何。您可以使用它SCOPE_IDENTITY()来检索您范围内的最后一个身份。

于 2012-07-13T13:22:50.490 回答