SSIS中如何用Lookup匹配4主键列并输出6列至OLE DB Command?
在SSIS中配置Lookup转换实现主键匹配并返回全部所需列
按照以下步骤配置Lookup转换,即可实现仅用4个主键列匹配,同时输出全部6列用于后续的更新/插入操作:
步骤1:设置Lookup的查询语句
在Lookup转换编辑器的连接选项卡中,选择「使用SQL查询指定要返回的数据集」,保留你现有的查询语句:SELECT FISCAL_YR, LOC_CODE, SYSTEM_ID, SYSTEM_CODE, LOC_NAME, ALIAS_NAME FROM LC1U1.Location_Supertbl1;这个语句的作用是从DB2目标表中获取所有需要的列,包括主键和要更新的字段。
步骤2:配置匹配列与输出列
切换到列选项卡:- 将数据流上游(SQL Server源)的4个主键列:
FISCAL_YR、LOC_CODE、SYSTEM_ID、SYSTEM_CODE,分别与Lookup数据集(DB2表)中的对应主键列建立匹配关系(拖动列进行关联,或在下拉菜单中选择匹配)。 - 除了主键列,额外将Lookup数据集中的
LOC_NAME、ALIAS_NAME列添加到输出(选择「查找列」作为输出类型)。
此时Lookup的输出将包含上游源的所有列,加上匹配到的DB2表中的LOC_NAME、ALIAS_NAME(无匹配时为NULL)。
- 将数据流上游(SQL Server源)的4个主键列:
步骤3:拆分匹配/不匹配分支
切换到错误输出选项卡,选择「将不匹配的行重定向到不匹配输出」。这样Lookup会生成两个分支:- 匹配分支:发送到OLE DB Command执行更新操作
- 不匹配分支:发送到OLE DB Destination执行插入操作
步骤4:配置OLE DB Command的更新逻辑
将更新语句修改为使用源的新值(如果你的需求是用SQL Server源的LOC_NAME、ALIAS_NAME覆盖DB2的对应字段):UPDATE LC1U1.Location_Supertbl1 SET LOC_NAME = ?, ALIAS_NAME = UPPER(?) WHERE FISCAL_YR = ? AND LOC_CODE = ? AND SYSTEM_ID = ? AND SYSTEM_CODE = ?在参数映射中,依次对应:
- 上游源的
LOC_NAME - 上游源的
ALIAS_NAME - 上游源(或Lookup返回)的
FISCAL_YR - 上游源(或Lookup返回)的
LOC_CODE - 上游源(或Lookup返回)的
SYSTEM_ID - 上游源(或Lookup返回)的
SYSTEM_CODE
- 上游源的
注意:Lookup的匹配逻辑仅由你在「列」选项卡中指定的4个主键匹配列决定,和查询语句返回的列数无关,所以即使查询返回6列,也只会按主键进行匹配。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

