Sql server 使用SSIS查找转换更新ADO.NET目标表
我有一个SSIS包,我想使用它根据包含代理键与自然键配对的代理键映射表的值来更新数据仓库暂存表中的列。具体地说,我希望使用缓存查找来更新事实暂存表,以包含库存维度的代理项键,方法与下面的SQL相同Sql server 使用SSIS查找转换更新ADO.NET目标表,sql-server,data-warehouse,etl,ssis,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.OLTPInve
UPDATE A
SET A.DWHSurrogateKey = B.DWHSurrogateKey
FROM SaleStagingTable A INNER JOIN inventoryStagingTable on B.OLTPInventoryKey = A.OLTPInventoryKey
不幸的是,从查找转换到目标的数据流的性质意味着它创建了一个全新的行,而不是更新现有的匹配行。是否可以操纵SSI来执行此操作
两个约束条件:
- 我的目标是ADO.NET目标,我们不能使用OLE DB目标或源(我们需要能够使用命名参数,而您不能使用OLE DB连接)
- 我需要对多个维度执行此操作,以将它们链接到事实表,因此我不能每次都将映射数据推送到新表,因为这样会变得非常混乱,难以管理
对于这样一个简单的更新,我将使用一个执行SQL任务,省去了处理数据流的麻烦。如果您有很多类似的更新,但具有不同的字段和表,我将使用Foreach项枚举器将列和表名称存储在Foreach循环容器中,然后添加一个脚本任务,该任务将获取项名称并生成一些可以存储在变量中的动态SQL,接下来添加执行SQL任务,并让它使用SQL变量 您是否能够在目标服务器上创建work/etl/stage表?如果你没有创建它们的能力,你能要求有足够特权的人创建它们吗?我完全同意。IMHO,为了SSIS而使用SSIS是一个错误。这些类型的任务更易于构建和维护,并且在使用基于集合的T-SQL解决方案而不是SSI时执行得更好