Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么SSIS转换表达式的语法是这样的?_Sql Server_Ssis - Fatal编程技术网

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

Sql server 为什么SSIS转换表达式的语法是这样的?,sql-server,ssis,Sql Server,Ssis,我正在看一个带有派生列数据流组件的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: C

我正在看一个带有
派生列
数据流组件的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字段,并且该字段将作为字符串输入。转换似乎是检查读取的值是否都是空白,如果是,则转换为空字符串值,否则使用原始的
CLIENT\u ID
字符串值

转换的语法让我感到困惑,可能是因为我试图将其与C代码联系起来。我希望表达式具有以下内容:

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

TRIM(CLIENT_ID) == "" ? (DT_STR,9,1252)NULL : CLIENT_ID
为什么NULL被两个转换包围:
(DT_STR,91252)

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


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

我以前尝试TRIM(CLIENT_ID)==”时遇到语法表达式错误?NULL(DT_STR,91252):CLIENT_ID,因此似乎仍然需要将“字符串NULL”转换为字符串,这很奇怪。我不知道为什么在通过null类型定义了目标列的数据类型之后,似乎需要进行额外的强制转换。这只发生在
DT_STR
数据类型中,如果您强制转换为
DT_WSTR
此表达式将起作用
TRIM(CLIENT_ID)==“”?NULL(DT_WSTR,9):(DT_WSTR,9)客户端ID
。。。这有点令人困惑。可能是一个字符串编码问题,可能是