SSIS中如何将条件拆分输出的NTE记录合同号映射到ITM记录
SSIS实现NTE合同号映射到ITM行的方法
针对你遇到的问题,这里提供三种可行的实现方案,按需选择:
方案一:变量存储+脚本组件赋值
- 在SSIS包的变量面板中创建字符串类型变量
var_ContractNumber,初始值设为空。 - 数据流任务中,在Conditional Split前添加一个脚本组件(转换):
- 输入列勾选
Recordtype和contractnumber - 在脚本编辑界面,将
var_ContractNumber设置为ReadWriteVariables - 编写C#脚本捕获NTE的合同号:
public override void Input0_ProcessInputRow(Input0Buffer Row) { if (Row.Recordtype == "NTE") { this.Variables.var_ContractNumber = Row.contractnumber; } }
- 输入列勾选
- 配置Conditional Split,按
Recordtype == "NTE"和Recordtype == "ITM"拆分数据流。 - 给ITM分支添加另一个脚本组件(转换):
- 输入列勾选
contractnumber - 将
var_ContractNumber设置为ReadOnlyVariables - 编写脚本替换空值:
public override void Input0_ProcessInputRow(Input0Buffer Row) { if (string.IsNullOrEmpty(Row.contractnumber)) { Row.contractnumber = this.Variables.var_ContractNumber; } }
- 输入列勾选
- 将两个分支分别写入对应目标文件。
方案二:缓存转换+查找替换
- 用Conditional Split先拆分出NTE分支,接入缓存转换,配置缓存存储
contractnumber字段。 - 对ITM分支添加查找转换,连接到上述缓存:
- 设置查找条件为固定匹配(如
1=1,因仅一条NTE记录) - 将ITM的
contractnumber列替换为缓存中的NTE合同号
- 设置查找条件为固定匹配(如
- 处理后的ITM数据写入目标文件,NTE分支直接写入对应文件。
方案三:合并连接关联数据
- 拆分NTE和ITM分支后,分别给两个分支添加排序转换,按
Recordtype排序(Merge Join要求输入已排序)。 - 添加Merge Join组件:
- 将NTE设为左输入,ITM设为右输入
- 连接条件设为
1=1(确保唯一关联) - 输出时选择ITM的所有列,并用NTE的
contractnumber覆盖ITM的空值
- 分别将合并后的ITM数据、原NTE数据写入对应目标文件。
内容的提问来源于stack exchange,提问作者Krishna Shitole
相关产品推荐
相关产品推荐

