在派生列转换表达式中使用CASE语句

时间:2014-06-02 21:58:00

标签: sql ssis case derived

以下是我的数据流:

Ole DB Source > Copy Column > Derived Column >Ole DB Command

我的OLE DB源具有以下SQL命令任务:

SELECT *

FROM Repair R
LEFT OUTER JOIN Vehicle V
ON R.SN = V.SN
AND R.Reg = V.Reg
LEFT OUTER JOIN Product P
ON R.PID = P.PID

这为我提供了一个名为PartNumber的关注列,它由以下两种格式表示:

%-%
%-%-%

以下是我的Copied Columns

Input Column = PartNumber
Output Alias = Copy of PartNumber

以下是我的Derived Column表达式:

Derived Column Name  Derived Column                  Expression
Name                 Replace 'PartNumber'            LEFT(PartNumber,FINDSTRING(PartNumber,"-",1) - 1)
Copy of Name         Replace 'Copy of PartNumber'  RIGHT([Copy of PartNumber],LEN([Copy of PartNumber]) - FINDSTRING([Copy of PartNumber],"-",1))

因此,我的PartNumber列替换为#########类型stringCopy of PartNumber列替换为####类型int < / p>

正如我之前所说,PartNumber的格式为%-%-%,提出了以下问题:

如果格式为PartNumber,如何将NULL列替换为%-%-%并取PartNumber并将其放入名为SubPart的新列中,同时保留SSIS个对象中的所有逻辑?

所以从本质上讲,我想做类似以下的事情:

PartNumber = CASE
WHEN 'PartNumber' LIKE '%-%-%'
THEN ABC = PartNumber AND PartNumber IS NULL 
END

我在Derived Column表达式中尝试了case语句,但是无效。 我是否会将CASE语句添加到OLE DB Source中的SQL命令任务中?

我希望这个问题对你来说简洁。

1 个答案:

答案 0 :(得分:0)

发现这个:

http://www.sqlservercentral.com/blogs/toddmcdermid/2012/05/22/basic-ssis-equivalents-to-t-sqls-like/

对于解决方案,我在Derived Column转换之前进行了2次Copy Column转换:

第一次Derived Column测试以查看'-'是否出现2次,如果是,请将PartNumber放入SubPart derived column: 派生列= SubPart,表达式:FINDSTRING(PartNumber,"-",2) > 0 ? PartNumber : ""

第二次Derived Column测试以查看SubPart= PartNumber列,如果是,则将空字符串放在PartNumber列中:

Derived Column Name取代Name,表达式:SubPart == Name ? "" : Name

我很困惑为什么SSIS在表达式库中没有通配符。