在派生列转换中考虑以下语句:
派生列名称:
EFFECTIVE_DATE
表达式:
TRIM([EFFECTIVE DATE]) == "" ? (DT_WSTR,255)NULL(DT_WSTR,255) : [EFFECTIVE DATE]
我读到这个:
“如果生效日期的修剪为空字符串,则将EFFECTIVE_DATE NULL转换为长度为255的Unicode字符串。其他,将EFFECTIVE DATE指定为当前值。”
我认为这是代码正在做的事情,但我对以下语法感到困惑:
(DT_WSTR,255)NULL(DT_WSTR,255)
我只是期望:
(DT_WSTR,255)NULL
我认为前导(DT_WSTR,255)是紧随其后的值的转换,是NULL值。为什么还有另一个(DT_WSTR,255)。我缺少什么?
答案 0 :(得分:1)
该表达式本身看起来有点多余,如:
NULL(DT_WSTR,255)
...表示"生成DT_WSTR类型的NULL值,长度为255"。
所以看起来像:
(DT_WSTR,255)NULL(DT_WSTR,255)
...表示"将长度为255的DT_WSTR类型的NULL值转换为类型DT_WSTR,长度为255"。
因此,它似乎在表面看起来好像类型转换实际上什么都不做。但是,如果您将其关闭,则可能会遇到问题as described here,这会导致您在运行时遇到此错误:对于条件运算符的操作数,仅支持输入列和强制转换操作的数据类型DT_STR。表达式" FINDSTRING([string-col],"",1)== 0? [string-col]:NULL(DT_STR,255,1252)"有一个DT_STR操作数,它不是输入列或强制转换的结果,不能与条件操作一起使用。要执行此操作,需要使用强制转换运算符显式转换操作数。
这似乎是一个奇怪的任意限制,但它存在,所以你需要演员。