以下是我的数据流:
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
列替换为#########
类型string
,Copy 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命令任务中?
我希望这个问题对你来说简洁。
答案 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在表达式库中没有通配符。