SSIS派生列映射失败:Oracle转Azure SQL提取空格前字符报错
问题原因
报错的核心是当前表达式没有处理NAME字段无空格的场景:当NAME中不存在空格时,FINDSTRING函数会返回0,此时减1运算得到的长度参数为-1,SUBSTRING函数不支持负长度参数,直接触发计算错误,再加上派生列的错误处置配置是「出错时失败」,就会导致整个数据流任务终止。
解决方案
1. 替换派生列表达式
使用兼容无空格、首尾空格、空值场景的表达式即可:
ISNULL(NAME) ? "" : ( FINDSTRING(TRIM(NAME), " ", 1) > 0 ? SUBSTRING(NAME, 1, FINDSTRING(TRIM(NAME), " ", 1) - 1) : TRIM(NAME) )
表达式逻辑说明:
- 优先判断
NAME是否为空,为空直接返回空字符串(可根据业务需求调整为返回NULL) - 对
NAME做首尾去空处理,避免字段前后的无效空格干扰空格位置判断 - 去空后如果存在空格,就提取第一个空格前的内容;如果不存在空格,直接返回去空后的完整
NAME值
2. 可选:异常数据排查配置
如果需要确认源端有多少行NAME不符合预期格式,可以修改派生列的错误处理配置:
- 右键派生列组件,选择「显示高级编辑器」
- 切换到「输入输出属性」标签,找到
Derived Column Output下的Trimmed_Name列 - 将该列的错误行处置规则从「失败」改为「重定向行」
- 把派生列的错误输出连到临时表或平面文件目标,即可导出所有异常行用于业务校验
内容的提问来源于stack exchange,提问作者user4912134
相关产品推荐
相关产品推荐

