为什么这个SSIS转换表达式语法是这样的?

时间:2017-04-17 16:13:04

标签: sql-server ssis

我正在查看带有Derived Column数据流组件的SSIS包

当我打开它时,我看到了一个转变:

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#代码联系起来。我期望EXPRESSION有以下内容:

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

或者

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

为什么NULL被两个转换包围:(DT_STR,9,1252)

1 个答案:

答案 0 :(得分:1)

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

与在C#中一样,第一个(DT_STR,9,1252)是类型转换。当然,此处不需要强制转换,因为此NULL已经具有正确的数据类型。