3

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

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

不幸的是,从查找转换到目标的数据流的性质意味着它会创建一个全新的行,而不是更新现有的匹配行。是否可以操纵 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

4

1 回答 1

3

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

于 2013-09-04T16:35:26.313 回答