我的csv文件包含每行的地址和人员数据。 我想转换这些数据: 1 - 将地址部分od行插入db的地址表中 2 - 使用添加的地址行的PK,将数据的人员部分添加到对地址栏有FK的Person表中 3-person表在数据库数据中存在FK,如何选择存在数据转换的PK?
我对SSIS的经验不多,我想知道如何实现这种转变?
可以在某个临时文件中保存地址PK吗?
答案 0 :(得分:1)
可悲的是,我没有用SSIS告诉你并捕捉身份价值的惊人故事。 Destination组件就是目的地。它们的唯一输出是错误路径。
您仍然可以使用SSIS的强大功能来解析平面文件,日志记录,配置等。我所看到的两个典型模式是A)将平面文件加载到临时表中然后使用纯TSQL加载表并捕获输出虚拟表。 B)假设您的源数据中有唯一的标识符,然后您可以使用该标识符在源数据和目标之间创建唯一的映射(查找+缓存转换是关键)。但是B上的赔率很长,我已经能够使用前一种模式每10/20进口一次。
答案 1 :(得分:1)
如果您可以修改目标表,我建议您使用以下内容:
答案 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任务而不是数据流从登台表中进行所有插入。