【问题标题】:SSIS conditional expression not handling conditional cast to NULL DT_STRSSIS 条件表达式不处理条件转换为 NULL DT_STR
【发布时间】: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


    【解决方案1】:

    因此,在 Microsoft 的无限智慧中,这作为 DT_STR 是 null 并且作为直接赋值完全有效:

    NULL(DT_STR,6,65001)
    

    但是,如果您想在所有最终条件都必须是相同类型的条件中分配该值,则必须这样做:

    (DT_STR,6,65001)NULL(DT_STR,6,65001)
    

    这同样不适用于其他类型,无论是直接分配还是通过条件分配,NULL(DT_I4) 之类的东西都是有效的。 SMH

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 2019-04-19
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多