SSIS表达式无法验证

kyo*_*ryu 3 ssis

我在SSIS派生列组件中设置了以下表达式:

TRIM(xCOL) == "" ? (DT_STR,7,1252)xCOL : NULL(DT_STR,7,1252)
Run Code Online (Sandbox Code Playgroud)

但是,这无法验证 - 我收到以下错误:

PKG出错:对于条件运算符的操作数,仅支持输入列和强制转换操作的数据类型DT_STR.表达式"TRIM(xCOL)==""?(DT_STR,7,1252)xCOL:NULL(DT_STR,7,1252)"有一个DT_STR操作数,它不是输入列或者是强制转换的结果,不能是与条件操作一起使用.要执行此操作,需要使用强制转换运算符显式转换操作数.

这有什么不对?

Kyl*_*ale 6

正如错误所述,您必须使用强制转换运算符显式强制转换。

TRIM(xCOL) == "" ? (DT_STR,7,1252)xCOL : (DT_STR,7,1252)NULL(DT_STR,7,1252)
Run Code Online (Sandbox Code Playgroud)


bil*_*nkc 6

Unicode - 您认为可行的所有SSIS事物的祸根.

TRIM(xCOL)==""?(DT_STR,7,1252)xCOL:NULL(DT_WSTR,7)

默认情况下,字符串上的表达式的返回类型为Unicode(DT_WSTR).您可以通过用空字符串替换最后一个表达式来证明这一点"".查看派生列分配的类型 - 它是DT_WSTR

TRIM(xCOL) == "" ? (DT_STR,7,1252)xCOL :  ""
Run Code Online (Sandbox Code Playgroud)

然后,解决方案是将整个表达式的结果转换为所需的类型.(我也认为你有一个逻辑问题,因为我假设你正在检查修剪过的字符串,以确定它是否为空/零长度,然后将其转换为NULL).另请注意,如果您为xCOL字段获取NULL,则会爆炸.

(DT_STR, 7, 1252)((TRIM(xCOL) == "") ? NULL(DT_WSTR, 7) :  TRIM(xCOL))
Run Code Online (Sandbox Code Playgroud)

来源数据

SELECT 'Hello' AS xCOL
UNION ALL SELECT ''
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述