VS2008环境下SSIS使用派生列拆分逗号分隔列报错如何解决
问题根因
你拆分姓的表达式中调用FINDSTRING(datosna, ",", 2)查找第2个逗号,但你的姓名字段格式为名, 姓,整段仅存在1个逗号,FINDSTRING找不到指定序号的匹配项时会返回0,代入长度计算后会得到负数,而SUBSTRING函数的长度参数不支持负数,因此触发报错。
正确派生列表达式
姓拆分修正表达式
SUBSTRING(datosna, FINDSTRING(datosna, ",", 1) + 1, LEN(datosna) - FINDSTRING(datosna, ",", 1))
直接用字段总长度减去第一个逗号的位置,就能得到姓的总长度,不需要找不存在的第二个逗号。
可选:边界异常兼容
如果存在部分数据无逗号的异常情况,可以加条件判断避免报错:
- 名的兼容表达式:
FINDSTRING(datosna, ",", 1) > 0 ? SUBSTRING(datosna, 1, FINDSTRING(datosna, ",", 1) - 1) : datosna
- 姓的兼容表达式:
FINDSTRING(datosna, ",", 1) > 0 ? TRIM(SUBSTRING(datosna, FINDSTRING(datosna, ",", 1) + 1, LEN(datosna) - FINDSTRING(datosna, ",", 1))) : ""
这里额外加了TRIM函数,用来去掉逗号和姓之间的多余空格。
内容的提问来源于stack exchange,提问作者Jorge
相关产品推荐
相关产品推荐

