插入一个表并使用他们的PK durning插入第二个表作为FK - SSIS

时间:2012-03-14 19:56:32

标签: ssis

我的csv文件包含每行的地址和人员数据。 我想转换这些数据: 1 - 将地址部分od行插入db的地址表中 2 - 使用添加的地址行的PK,将数据的人员部分添加到对地址栏有FK的Person表中 3-person表在数据库数据中存在FK,如何选择存在数据转换的PK?

我对SSIS的经验不多,我想知道如何实现这种转变?

可以在某个临时文件中保存地址PK吗?

4 个答案:

答案 0 :(得分:1)

可悲的是,我没有用SSIS告诉你并捕捉身份价值的惊人故事。 Destination组件就是目的地。它们的唯一输出是错误路径。

您仍然可以使用SSIS的强大功能来解析平面文件,日志记录,配置等。我所看到的两个典型模式是A)将平面文件加载到临时表中然后使用纯TSQL加载表并捕获输出虚拟表。 B)假设您的源数据中有唯一的标识符,然后您可以使用该标识符在源数据和目标之间创建唯一的映射(查找+缓存转换是关键)。但是B上的赔率很长,我已经能够使用前一种模式每10/20进口一次。

答案 1 :(得分:1)

如果您可以修改目标表,我建议您使用以下内容:

  1. 将序列号列添加到数据源。 This article可能有帮助。
  2. 向两个目标表添加一列以接受序列号数据类型(无论您使用什么)。
  3. 为地址和人员使用单独的数据流,确保地址先行。映射seq。适当的数字列。
  4. 在Person数据流中,对Address表使用Lookup组件,使用Seq编号作为查找的键。适当填写外键值。

答案 2 :(得分:0)

只需在两个不同的数据流中执行此操作。

在第一个读取并插入Addreess部分时,在第二个上读取Person部分并将其与刚刚创建的Address表连接(您可以使用查找组件根据名称获取ID)

答案 3 :(得分:0)

最好是在表中添加一个不会在应用程序中显示文件unique_id的字段,然后在连接中使用该字段来填充子表。但有时你不能搞乱数据库的结构,特别是如果它是一个COTS产品。

我们有一个偷偷摸摸的伎俩。首先将数据加载到临时表(如果文件本身没有唯一标识符,则添加标识)和parent_id的空字段。

接下来将唯一标识符放入其他必需字段而不是其正常值(我们使用last_name但是如果你有一个taht是与uniqueid相同的数据类型,那就更好)。然后,您可以加入必需的字段和登台表中的uniqueid,以更新它以获得真正的parentid。然后更新存储临时ID的字段及其实际值(因为现在您可以使用真正的parent_id)。现在,您在表中拥有真正的parent_id,子表的数据流可以加入到该表中。这为数据库创建了更多工作,因此只有在无法更改结构时才使用它。

或者,您可以使用存储过程和执行SQL任务而不是数据流从登台表中进行所有插入。