sql-server - 使用 SSIS 查找转换更新 ADO .NET 目标表

标签 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

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

相关文章:

PHP + PDO : Bind null if param is empty

c# - codefirst 数据库未创建

database - 数据仓库和/或数据库?

database - 数据沿袭和数据来源之间有什么区别?

amazon-s3 - Redshift 中的维度建模和 ETL

java - 组织从一个 JSON 对象结构到另一个 JSON 对象结构的映射代码

sql-server - SQL Server R2 企业版下载?

javascript - 为什么SQL返回的字符串长度和其他语言返回的字符串长度不一样?

azure - 在 Azure Synapse 中预先计算 OLAP 多维数据集

oracle - 仅当表中的数据更新时才重建 Informatica 持久缓存