使用SSIS查找转换来更新ADO .NET目标表

时间:2013-09-04 16:13:19

标签: sql-server data-warehouse etl ssis

我有一个SSIS包,我想根据包含与自然键配对的代理键的代理键映射表的值来更新数据仓库登台表中的列。具体来说,我想使用缓存查找来更新事实登台表,以包含库存维度的代理键,其方式与以下SQL相同。

 UPDATE A
      SET A.DWHSurrogateKey = B.DWHSurrogateKey
  FROM SaleStagingTable A INNER JOIN inventoryStagingTable on B.OLTPInventoryKey = A.OLTPInventoryKey

不幸的是,从Lookup转换到目标的数据流的性质意味着它创建了一个全新的行,而不是更新现有的匹配行。是否有可能操纵SSIS来做到这一点?

一些约束:

  • 我的目标是ADO .NET目标,我们不能使用OLE DB目标或源(我们需要能够使用命名参数,而不能使用OLE DB连接)
  • 我需要为多个维度执行此操作以将它们链接到事实表,因此我不能每次都将映射数据推送到新表,因为这变得非常混乱且难以管理

我希望能够做到这些家伙建议但使用ADO连接器而不是OLE DB:

http://redsouljaz.wordpress.com/2009/11/30/ssis-update-data-from-different-table-if-data-is-null/

http://www.rad.pasfu.com/index.php?/archives/46-SSIS-Upsert-With-Lookup-Transform.html

1 个答案:

答案 0 :(得分:3)

对于这样一个简单的更新,我会使用一个执行SQL任务,并省去了不得不乱用数据流的麻烦。如果你有很多类似的更新,但有不同的字段和表,我会使用Foreach项目枚举器将列和表名存储在Foreach循环容器中,然后我会添加一个脚本任务,它将获取项目名称并生成一些动态可以存储在变量中的SQL,然后添加执行SQL任务并使其使用SQL变量。