You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:02:46