SSIS Conditional Split空值错误求助:表达式返回NULL但条件拆分要求布尔结果
解决SSIS值拆分时的三个核心问题
先处理触发的条件拆分错误(Error 0xC020902B)
这个错误的核心原因很明确:你的表达式[Copy of RATE_INR] > 1000返回了NULL,但条件拆分组件要求必须返回布尔值(True/False)。NULL在这里被判定为错误,因为SSIS不知道该把这类行分到哪个分支。
你有两个直接解决办法:
- 修改表达式,主动处理NULL:
把原表达式改成能处理NULL的逻辑,比如如果字段为NULL就默认归为False(或者根据你的业务需求改成True):
如果你想把NULL值单独作为一个分支,也可以新增一个条件:ISNULL([Copy of RATE_INR]) ? FALSE : [Copy of RATE_INR] > 1000ISNULL([Copy of RATE_INR]),命名为"NULL RATE_INR"分支。 - 调整错误处置规则:
双击条件拆分组件,找到"Case 1"输出项,点击它右侧的「错误处置」下拉框,选择:Ignore Failure:SSIS会自动把NULL结果当成False处理,直接跳过错误;Redirect Row:把所有触发NULL的行转到错误输出,方便你后续查看这些异常数据的具体情况。
再解决预览列数异常+空值显示问题
你说数据源实际只有15列,但预览显示200列,而且数据源里看不到空值但预览有,这大概率是元数据读取错误或者数据源配置问题:
- 刷新数据源元数据:
在数据流任务里,右键点击你的数据源组件(比如OLE DB Source),选择「Refresh Metadata」,强制SSIS重新读取数据源的最新结构。旧的元数据缓存经常会导致列数、字段类型显示异常。 - 验证数据源的真实数据:
别只靠可视化工具看数据,用SQL查询确认[RATE_INR]是否真的没有NULL:
另外,SELECT * FROM [你的数据源表名] WHERE [RATE_INR] IS NULL[Copy of RATE_INR]是你在数据流里复制的字段吗?检查复制操作有没有误关联其他字段,导致出现异常值。 - 检查数据源连接配置:
- 如果是数据库数据源:确认你选的是正确的表/视图,有没有不小心选到系统表或者其他包含大量列的对象?
- 如果是平面文件(比如CSV):检查分隔符设置是否正确!比如本来是逗号分隔,你选成了制表符,或者文件里有换行符错误,会导致SSIS把一行拆成几十上百列,同时产生大量空值。
按照这个顺序排查,应该能快速解决你的问题~
内容的提问来源于stack exchange,提问作者Srijan Dixit
相关产品推荐
相关产品推荐

