需要SSIS帮助-如何从目标位置获取ID

时间:2019-02-27 14:54:47

标签: sql sql-server oracle ssis oracle12c

我是SSIS的新手。当前正在将数据从SQL迁移到Oracle。我们在两个数据库中都有表(具有不同的数据类型)。假设有一位主人(劳斯)和一位孩子(雇员)。我正在将Employee表从SQL迁移到Oracle。 RoleID是Employee表中的FK。

由于Destination数据类型和RoleId与Source不同,因此我需要从Source员工表中获取“ RoleName”,与Destination中的Role Table连接并获取各自的ID。

来源: 员工表-> RoleId(GUID数据类型)

目的地 员工表-> RoleId(整数数据类型)

我尝试使用FuzzyLookup和Lookup,但未在此处获取目标连接管理器的详细信息。还有其他想法如何实现这一目标吗?

谢谢。

表结构:

enter image description here

2 个答案:

答案 0 :(得分:2)

使用常规的查找转换

为什么使用模糊查找转换,而您可以使用常规查找转换来实现此目的。

模糊查找转换具有局限性,因为引用必须是来自Fuzzy lookup transformation documentation的SQL Server数据库:

  

参考数据源必须是SQL Server数据库中的表。

基于Lookup transformation documentation

  

Lookup转换支持OLE DB连接管理器的以下数据库提供程序:

     
      
  • SQL Server
  •   
  • Oracle
  •   
  • DB2
  •   

数据准备

如果数据不同(这是使用模糊查找的原因),请尝试清理并准备数据以使其与查找参考相匹配。方法很多:

  1. Data preparation (wrangling) using SQL
  2. 使用Derived Columns for simple cleaning operations
  3. 使用a Script Component for a complex cleaning logic
  4. 使用Data Conversion transformation to match the Data Types

答案 1 :(得分:1)

如果可能的话,最好的解决方法是将源数据原样导入到目标服务器上的登台表中,然后在目标服务器上的过程中将数据导入到最终表中。在过程代码中查找以获取ID。

如果您不能这样做,而必须在SSIS包中完成所有操作,则可以通过向数据流中添加另一个Source组件来做到这一点,该组件从Oracle中的Role表获取数据并进行合并联接到来自SQL Server的数据,在RoleName上加入以将ID从Oracle表获取到数据流中。请注意,如果采用这种方式,则必须对“合并联接”键(RoleName)上的两个源组件进行订购。