SSIS基本数据转换功能

时间:2013-07-01 12:51:57

标签: sql-server-2008 ssis

在派生列转换中考虑以下语句:

派生列名称:

EFFECTIVE_DATE

表达式:

    TRIM([EFFECTIVE DATE]) == "" ? (DT_WSTR,255)NULL(DT_WSTR,255) : [EFFECTIVE DATE]

我读到这个:

“如果生效日期的修剪为空字符串,则将EFFECTIVE_DATE NULL转换为长度为255的Unicode字符串。其他,将EFFECTIVE DATE指定为当前值。”

我认为这是代码正在做的事情,但我对以下语法感到困惑:

(DT_WSTR,255)NULL(DT_WSTR,255)

我只是期望:

(DT_WSTR,255)NULL

我认为前导(DT_WSTR,255)是紧随其后的值的转换,是NULL值。为什么还有另一个(DT_WSTR,255)。我缺少什么?

1 个答案:

答案 0 :(得分:1)

该表达式本身看起来有点多余,如:

NULL(DT_WSTR,255)

...表示"生成DT_WSTR类型的NULL值,长度为255"。

所以看起来像:

(DT_WSTR,255)NULL(DT_WSTR,255)

...表示"将长度为255的DT_WSTR类型的NULL值转换为类型DT_WSTR,长度为255"。

因此,它似乎在表面看起来好像类型转换实际上什么都不做。但是,如果您将其关闭,则可能会遇到问题as described here,这会导致您在运行时遇到此错误:

  

对于条件运算符的操作数,仅支持输入列和强制转换操作的数据类型DT_STR。表达式" FINDSTRING([string-col],"",1)== 0? [string-col]:NULL(DT_STR,255,1252)"有一个DT_STR操作数,它不是输入列或强制转换的结果,不能与条件操作一起使用。要执行此操作,需要使用强制转换运算符显式转换操作数。

这似乎是一个奇怪的任意限制,但它存在,所以你需要演员。