问题描述
我在使用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