我有一个SSIS包,我想根据包含与自然键配对的代理键的代理键映射表的值来更新数据仓库登台表中的列。具体来说,我想使用缓存查找来更新事实登台表,以包含库存维度的代理键,其方式与以下SQL相同。
UPDATE A
SET A.DWHSurrogateKey = B.DWHSurrogateKey
FROM SaleStagingTable A INNER JOIN inventoryStagingTable on B.OLTPInventoryKey = A.OLTPInventoryKey
不幸的是,从Lookup转换到目标的数据流的性质意味着它创建了一个全新的行,而不是更新现有的匹配行。是否有可能操纵SSIS来做到这一点?
一些约束:
我希望能够做到这些家伙建议但使用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
答案 0 :(得分:3)
对于这样一个简单的更新,我会使用一个执行SQL任务,并省去了不得不乱用数据流的麻烦。如果你有很多类似的更新,但有不同的字段和表,我会使用Foreach项目枚举器将列和表名存储在Foreach循环容器中,然后我会添加一个脚本任务,它将获取项目名称并生成一些动态可以存储在变量中的SQL,然后添加执行SQL任务并使其使用SQL变量。