如何用Biml生成SSIS Conditional Split组件的表达式?(归档任务)
解决SSIS归档任务中Conditional Split的Biml表达式问题
一、核心表达式生成逻辑
1. 新增记录(New_Records)
全外连接场景下,新增记录对应源端存在但目标端不存在的记录,此时目标端所有主键列均为空。通过Biml拼接表达式时,需将所有ISNULL(DST_<列名>)用逻辑与(&&)连接:
<Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"ISNULL(DST_{c.Name})")) #> </Expression>
若需过滤源端空主键的无效数据,可扩展表达式确保源端主键非空:
<Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"!ISNULL(SRC_{c.Name})")) #> && <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"ISNULL(DST_{c.Name})")) #> </Expression>
2. 已存在记录(Already_Exists)
已存在记录要求所有源端主键列与对应目标端主键列完全匹配,需将每个SRC_<列名> == DST_<列名>用逻辑与(&&)连接:
<Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"SRC_{c.Name} == DST_{c.Name}")) #> </Expression>
注意:若主键为字符串类型,可根据需求用UPPER()或LOWER()统一大小写,避免比较规则冲突。
二、修正后的完整Conditional Split Biml代码
<ConditionalSplit Name="Conditional_Split"> <OutputPaths> <OutputPath Name="New_Records" IsErrorOutput="false"> <Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"ISNULL(DST_{c.Name})")) #> </Expression> </OutputPath> <OutputPath Name="Already_Exists" IsErrorOutput="false"> <Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"SRC_{c.Name} == DST_{c.Name}")) #> </Expression> </OutputPath> <!-- 可选:添加目标端独有的记录输出,用于归档清理 --> <OutputPath Name="Unmatched_DST" IsErrorOutput="false"> <Expression> <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"!ISNULL(DST_{c.Name})")) #> && <#= string.Join(" && ", tbl.Columns.Where(c => c.IsUsedInPrimaryKey).Select(c => $"ISNULL(SRC_{c.Name})")) #> </Expression> </OutputPath> </OutputPaths> </ConditionalSplit>
三、Biml与C#学习资源推荐
Biml学习资源
- 《Biml for SSIS: A Practical Guide》:系统性讲解Biml在SSIS中的实战应用,包含大量可复用的脚本模板
- 微软官方Biml文档:覆盖基础语法、SSIS组件映射等核心内容,是官方权威参考
- BimlScript社区代码片段库:收集了业内常用的Biml脚本,可直接修改适配自身需求
C#基础学习资源
- 《C# 7.0 in a Nutshell》:全面覆盖C#核心语法与高级特性,适合快速入门及进阶
- 微软官方C#入门教程:从基础语法到面向对象编程,循序渐进讲解核心知识点
- 国内C#基础教程系列:如菜鸟教程的C#板块,内容通俗易懂,适合新手快速上手
内容的提问来源于stack exchange,提问作者JoshuaG
相关产品推荐
相关产品推荐

