这是派生列“ReplaceWeight”
的表达式LEN(TRIM(Weight)) == 0 ? (DT_STR,50,1252)NULL(DT_STR,50,1252) : (DT_STR,50,1252)Weight
我不清楚这个IF语句的True部分的语法......
我将其读作“如果修剪列'Weight'的长度为零,则为派生列ReplaceWeight 指定类型为string的NULL值 ELSE将Weight列转换为字符串并将此值分配给派生列“
表达式构建器向我显示
NULL(DT_STR,50,1252)
...返回指定数据类型DT_STR的NULL值。这对我来说有点奇怪,因为我习惯于将NULL作为各种类型的数据库列的值。
我是否要解释以下意思是“将STRING数据类型的空值转换为STRING数据类型?”
(DT_STR,50,1252)NULL(DT_STR,50,1252)
我认为这是有效的:
LEN(TRIM(Weight)) == 0 ? NULL : (DT_STR,50,1252)Weight
我是否正在解释这段代码?
答案 0 :(得分:4)
您发布的第一个表达式是正确的。
表达式根据表达式中“看到”的值定义派生列的数据类型。您没有像定义表时那样手动定义派生列的数据类型。因此,所有可能的返回值都必须正确定义数据类型。
这是一个功能: NULL(DT_STR,50,1252)
该函数返回NULL并定义了字段类型。 您会认为这对SSIS来说已经足够了,但您还必须对返回的值进行类型转换,从而导致有些多余: (DT_STR,50,1252)NULL(DT_STR,50,1252)
如果有人可以解释为什么 SSIS要求对已经定义了数据类型的类型进行类型转换,我有兴趣听听解释。
干杯, 彼得