【发布时间】:2020-11-03 23:00:48
【问题描述】:
我在使用 SSIS 表达式时遇到了一点问题,在派生列转换数据流任务中,我试图从字符串输入中获取 6 个字符的子字符串,如果没有,则将派生列值转换为 NULL不存在。这是我正在使用的代码,添加了换行符和缩进以提高可读性:
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)
)
(供参考,当KeyValueLength为-2时未找到键值,当为-1时在StringInput的末尾找到,任何其他数字都找到在StringInput 的中间。此代码适用于我得到的其他键值,这些键值转换为 DT_I4 和 DT_DECIMAL)
单独来说,以下三个表达式不会产生错误:
NULL(DT_STR,6,65001)
(DT_STR,6,65001)RTRIM(SUBSTRING(StringInput,KeyValueStart,999))
(DT_STR,6,65001)SUBSTRING(StringInput,KeyValueStart,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 操作数 cast,并且不能与条件操作一起使用。去表演 此操作,操作数需要使用强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制强制转换 运算符。
我很难弄清楚到底是什么问题。该错误消息表明它与使用条件有关,但我没有看到问题。
【问题讨论】:
标签: ssis casting conditional-statements