微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSIS条件表达式未处理条件转换为NULL DT_STR

如何解决SSIS条件表达式未处理条件转换为NULL DT_STR

我在使用SSIS表达式时遇到麻烦,在一个派生列转换数据流任务中,我试图从字符串输入中获取6个字符的子字符串,如果不将派生列的值转换为NULL,不存在。这是我正在使用的代码,并添加了换行符和缩进以提高可读性:

keyvalueLength == -2 ?
    NULL(DT_STR,6,65001) :
    (
        keyvalueLength == -1 ?
        (DT_STR,65001)RTRIM(SUBSTRING(StringInput,keyvalueStart,999)) :
        (DT_STR,65001)SUBSTRING(StringInput,keyvalueLength)
    )

(作为参考,当keyvalueLength-2时,找不到键值;当值为-1时,则在StringInput的末尾找到键值,其他任何数字都可以在StringInput的中间找到。此代码适用于我获取的其他要转换为DT_I4和DT_DECIMAL的键值)

分别地,以下三个表达式不会产生错误

NULL(DT_STR,65001)

(DT_STR,999))

(DT_STR,keyvalueLength)

但是在上面的嵌套条件中放在一起时,尝试保存窗口时出现以下错误

对于条件运算符的操作数,数据类型DT_STR为 仅支持输入列和强制转换操作。表达方式 “ keyvalueLength == -2?NULL(DT_STR,6,65001):(keyvalueLength == -1? (DT_STR,6,65001)RTRIM(SUBSTRING(StringInput,keyvalueStart,999)): (DT_STR,6,65001)SUBSTRING(StringInput,keyvalueStart,keyvalueLength))“ DT_STR操作数不是输入列,也不是 强制转换,并且不能与条件运算一起使用。去表演 此操作,需要使用强制类型转换显式地转换操作数 运算符。

我很难弄清楚这里到底是什么问题。该错误消息表明这与条件条件的使用有关,但我没有发现问题。

解决方法

因此,在Microsoft的无限智慧中,它作为DT_STR为空,并且作为直接值分配完全有效:

NULL(DT_STR,6,65001)

但是,如果要在所有最终条件都必须为同一类型的条件中分配该值,则必须执行以下操作:

(DT_STR,65001)NULL(DT_STR,65001)

这不适用于其他类型,其中NULL(DT_I4)之类的内容有效,而不管它是直接分配还是通过条件分配。 SMH

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。