我有一个 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
最佳答案
对于这样一个简单的更新,我会使用一个执行 SQL 任务并省去处理数据流的麻烦。如果您有很多类似的更新但具有不同的字段和表,我会使用 Foreach 项目枚举器将列名和表名存储在 Foreach 循环容器中,然后我会添加一个脚本任务来获取项目名称并生成一些动态SQL可以存储在一个变量中,接下来添加执行SQL任务并让它使用SQL变量。
关于sql-server - 使用 SSIS 查找转换更新 ADO .NET 目标表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618922/