我在SSIS派生列组件中设置了以下表达式:
TRIM(xCOL) == "" ? (DT_STR,7,1252)xCOL : NULL(DT_STR,7,1252)
然而,这无法验证 - 我收到以下错误:
PKG错误:对于条件运算符的操作数,数据类型 仅支持输入列和强制转换操作的DT_STR。该 表达式“TRIM(xCOL)==”“?(DT_STR,7,1252)xCOL: NULL(DT_STR,7,1252)“具有不是输入列的DT_STR操作数 或者演员的结果,并且不能与条件一起使用 操作。要执行此操作,操作数必须是 使用强制转换运算符显式转换。
这里有什么问题?
答案 0 :(得分: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 : ""
然后,解决方案是将整个表达式的结果转换为所需的类型。 (我也认为你有一个逻辑问题,因为我假设你正在检查修剪过的字符串,以确定它是否为空/零长度,然后将其转换为NULL)。另请注意,如果您在xCOL字段中获得NULL,则会爆炸。
(DT_STR, 7, 1252)((TRIM(xCOL) == "") ? NULL(DT_WSTR, 7) : TRIM(xCOL))
SELECT 'Hello' AS xCOL
UNION ALL SELECT ''
答案 1 :(得分:4)
与错误一样,您必须使用强制转换运算符显式转换。
TRIM(xCOL) == "" ? (DT_STR,7,1252)xCOL : (DT_STR,7,1252)NULL(DT_STR,7,1252)