0

考虑派生列转换中的以下语句:

派生列名称:

EFFECTIVE_DATE

表达:

    TRIM([EFFECTIVE DATE]) == "" ? (DT_WSTR,255)NULL(DT_WSTR,255) : [EFFECTIVE DATE]

我把它读成:

“如果有效日期的修剪是空字符串,则分配 EFFECTIVE_DATE NULL 转换为长度为 255 的 Unicode 字符串。否则,分配有效日期其当前值。”

我假设这就是代码正在做的事情,但我对以下语法感到困惑:

(DT_WSTR,255)NULL(DT_WSTR,255)

我只期望:

(DT_WSTR,255)NULL

我认为前导 (DT_WSTR,255) 是紧随其后的值的转换,即 NULL 值。为什么紧随其后的是另一个(DT_WSTR,255)。我错过了什么?

4

1 回答 1

1

该表达式本身看起来有点多余,如下所示:

NULL(DT_WSTR,255)

...表示“生成长度为 255 的 DT_WSTR 类型的 NULL 值”。

所以它看起来像:

(DT_WSTR,255)NULL(DT_WSTR,255)

...表示“将长度为 255 的 DT_WSTR 类型的 NULL 值转换为长度为 255 的 DT_WSTR 类型”。

因此,从表面上看,好像类型转换实际上什么也没做。但是,如果您不使用它,您可能会遇到此处描述的问题,即您将在运行时遇到此错误:

对于条件运算符的操作数,仅输入列和强制转换操作支持数据类型 DT_STR。表达式 "FINDSTRING([string-col],"",1) == 0 ? [string-col] : NULL(DT_STR,255,1252)" 的 DT_STR 操作数不是输入列或结果cast,并且不能与条件操作一起使用。要执行此操作,需要使用强制转换运算符显式强制转换操作数。

这似乎是一个奇怪的任意限制,但它存在,所以你需要演员。

于 2013-07-01T13:14:52.940 回答