0

这是派生列“ReplaceWeight”的表达式

LEN(TRIM(Weight)) == 0 ? (DT_STR,50,1252)NULL(DT_STR,50,1252) : (DT_STR,50,1252)Weight

我不清楚这个 IF 语句的 True 部分的语法......

我将其读作“如果修剪列'Weight'的长度为零,则将派生列ReplaceWeight分配为字符串类型的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

我是否正确地解释了这段代码?

4

1 回答 1

4

您发布的第一个表达式是正确的。

该表达式根据它在表达式中“看到”的值定义派生列的数据类型。您没有机会像定义表时那样手动定义派生列的数据类型。因此,所有可能的返回值都必须正确定义数据类型,这一点很重要。

这是一个函数:NULL(DT_STR,50,1252)

该函数返回 NULL 并定义了字段类型。你会认为这对 SSIS 来说已经足够了,但是你还必须对返回的值进行类型转换,导致有些多余: (DT_STR,50,1252)NULL(DT_STR,50,1252)

如果有人可以解释为什么SSIS 需要类型转换已经定义了数据类型的值,我很想听听解释。

干杯,彼得

于 2013-04-07T21:07:59.330 回答