Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 插入一个表并在插入第二个表时使用它们的PK作为FK-SSI_Ssis - Fatal编程技术网

Ssis 插入一个表并在插入第二个表时使用它们的PK作为FK-SSI

Ssis 插入一个表并在插入第二个表时使用它们的PK作为FK-SSI,ssis,Ssis,我有csv文件,每行都有地址和个人数据。 我要转换此数据: 1-将地址部分od行插入db的地址表 2-使用添加地址行的主键,将数据中的人员部分添加到人员表中,该表具有FK to address列 数据库数据中有FK的三人表,ssis传输时如何选择已有数据的PK 我对SSIS没有什么经验,我想知道如何实现这种转变 有可能将地址PK保存在某个临时文件中?遗憾的是,我没有关于SSI和捕获身份值的精彩故事可以告诉您。目的地组件就是目的地。它们的唯一输出是错误路径 您仍然可以使用SSIS的强大功能来解析平

我有csv文件,每行都有地址和个人数据。 我要转换此数据: 1-将地址部分od行插入db的地址表 2-使用添加地址行的主键,将数据中的人员部分添加到人员表中,该表具有FK to address列 数据库数据中有FK的三人表,ssis传输时如何选择已有数据的PK

我对SSIS没有什么经验,我想知道如何实现这种转变


有可能将地址PK保存在某个临时文件中?

遗憾的是,我没有关于SSI和捕获身份值的精彩故事可以告诉您。目的地组件就是目的地。它们的唯一输出是错误路径


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

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

  • 将序列号列添加到数据源。也许会有帮助
  • 向两个目标表中添加一列以接受序列号数据类型(无论您使用什么)
  • 对地址和人员使用单独的数据流,确保地址优先。映射seq。对列进行适当编号
  • 在Person数据流中,对地址表使用Lookup组件,使用Seq number作为要查找的关键字。适当地填写外键值

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


    第一次读取并插入addrees部分,第二次读取Person部分并将其与刚刚创建的地址表连接(可以使用查找组件根据名称获取ID)

    如果您可以为表中的文件唯一id添加一个不会在应用程序上显示的字段,然后在数据联接中使用该字段来填充子表,则效果最好。但有时你不能搞乱数据库的结构,尤其是如果它是COTS产品的话

    我们有一个鬼鬼祟祟的把戏。首先将数据加载到暂存表(如果文件本身没有唯一标识符,则添加一个标识)和一个空的父id字段

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


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

    您是否可以澄清您是否正在插入MS SQL Server数据库,如果是,地址的主键是标识列?您可以避免第二个数据流(和查找)通过在分配序列号后使用多播。一个输出到地址的目的地,第二个输出到人员的目的地。