2017-04-17 57 views
1

我期待在SSIS包用Derived Column数据流组件为什么这个SSIS转换表达式语法是这样的?

的时候,我打开它,我看到1种转换:

Derived COLUMN Name : CLIENT_ID 
Derived COLUMN: "REPLACE 'CLIENT_ID'" 
EXPRESSION: TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL(DT_STR,9,1252) : CLIENT_ID 
DATA TYPE: string [DT-STR] 
LENGTH: 9 
PRECISION: 
SCALE: 
CODE PAGE: 1252 (ANSI- LATIN I) 

我想了解SSIS表达和我我不确定是否理解语法。

TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL(DT_STR,9,1252) : CLIENT_ID 

我相信代码在CLIENT_ID场从平面文件读取和领域作为字符串来英寸转换似乎检查读取的值是否全部为空白,如果是,则转换为NULL字符串值,否则使用原始的CLIENT_ID字符串值。

转换的语法使我困惑,也许是因为我想把它与C#代码联系起来。我期待为表达式如下:

TRIM(CLIENT_ID) == "" ? NULL : CLIENT_ID 

或许

TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL : CLIENT_ID 

为什么NULL由转换所包围:(DT_STR,9,1252)

+0

这只是在'DT_STR'数据类型发生的情况下,如果你转换为'DT_WSTR'这个表达式才能工作'TRIM(CLIENT_ID)==“”? NULL(DT_WSTR,9):(DT_WSTR,9)CLIENT_ID' ...这有点令人困惑。也许这是一个字符串编码问题 – Hadi

+1

可能重复[这是什么意思? LEN(TRIM(Weight))== 0? (DT \ _STR,50,1252)NULL(DT \ _STR,50,1252):(DT \ _STR,50,1252)Weight(http://stackoverflow.com/questions/15858210/what-does-this- mean-lentrimweight-0-dt-str-50-1252nulldt-str-50-125) – Hadi

回答

1

SSIS有一个​​。例如,NULL(DT_STR,9,1252)表示特定于该代码页上的九个字符串的空值。

和C#一样,第一个(DT_STR,9,1252)是一个类型转换。当然,这里不需要演员,因为NULL已经具有正确的数据类型。

+0

当我以前试过TRIM(CLIENT_ID)==“”时,得到语法表达式错误? NULL(DT_STR,9,1252):CLIENT_ID,所以它仍然有必要将“string NULL”转换为一个字符串,这很奇怪。 – ChadD

+0

我不知道为什么在目标列的数据类型已经通过空类型定义之后,额外的转换似乎是必要的。 – criticalfix

相关问题