2012-03-14 31 views
1

我有csv文件,每行都有地址和人物数据。 我想转换这些数据: 1-将地址部分od行插入db的地址表 2-将具有FK地址列的Person表中的添加地址行的数据添加到人列中 3人表在数据库数据中是否存在FK,如何选择SIS转换中存在的数据PK?插入一张桌子,并使用他们的PK插入第二张桌子作为FK - SSIS

我有SSIS一点经验,我想知道如何才达到这一转变?

它可以保存地址PK在一些温度?

+0

你能澄清无论你是插入到MS SQL Server数据库中,如果是这样的地址的PK IDENTITY列? – 2012-03-15 18:33:04

回答

1

可悲的是,我没有神奇的故事,告诉你SSIS并捕获标识值。目标组件就是目标。他们唯一的输出是错误路径。

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

1

如果你可以修改目标表,我提出以下建议:

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

您可以在分配序号后使用多播来避免第二个数据流(和查找)。一个输出转到Address的目的地,第二个输出转到Person的目的地。 – 2012-03-16 17:22:35

0

就做,在两个不同的数据流。

在第一次阅读并插入Addreess部分和第二你读的人一部分,并与刚创建的地址表中加入它(你可以使用一个查找组件,以获得基于名称的ID)

0

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

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

接下来把唯一标识符到一些其他必填字段,而不是其正常价值(我们使用的姓氏,但如果你有一个taht是相同的数据类型为更好的UNIQUEID)。然后,您可以加入必要的字段和暂存表中的唯一标识符以更新它以获取真正的标识。然后用你的实际值更新你存储临时ID的字段(因为你现在可以使用真正的parent_id)。现在,您在表中拥有真正的parent_id,子表的数据流可以加入到该表中。这会为数据库创建更多的工作,所以只有在无法更改结构时才使用它。

另外,您可以使用存储过程和执行SQL任务完成所有从临时表的插入而不是在一个数据流。

相关问题