DTS转换为SSIS衍生列表达式

时间:2018-10-24 12:47:41

标签: sql-server vbscript ssis derived-column

我被要求将DTS包转换为SSIS。两者都是我的新手,因此我试图同时学习两者和如何在两者之间进行转换。

我们尝试将几种转换更改为“派生列表达式”,但是在语法上有些挣扎。

我们将数据从Excel工作表中提取到SQL Server。

我们在DTS软件包中使用的脚本如下:

Function Main()
DTSDestination("Period") = Cint(Replace(DTSSource("Period"),"Q",""))
If not IsNull(DTSSource("Annual % Change")) Then
    If cStr(DTSSource("Annual % Change")) <> "." then
        DTSDestination("% Change") = cDbl(DTSSource("Annual % Change"))
    End If
End If

Main = DTSTransformStat_OK
End Function 

输出表如下:

[Period] [tinyint] NOT NULL,
[% Change] [decimal](7, 2) NULL,

我相信对于“期间”列,它应该仅为(DT_I1)REPLACE([Period],"Q","")

对于[年度%变化]列,我尝试将其细分,我认为是:

NOT ISNULL([Annual % Change]) 
(DT_STR,10,1252)[Annual % Change] <> "." 
(DT_R8)[Annual % Change]

然后尝试构建条件表达式会给我:

ISNULL([Annual % Change]) ? NULL(DT_R8) : 
    (DT_STR,10,1252)[Annual % Change] <> "." ? (DT_R8)[Annual % Change]: NULL(DT_R8)

这会抛出解析错误,我错了什么主意吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

在SSIS表达式语言中,不等于=。 <>不起作用。我对您的表情进行了更改,对我有用。

ISNULL([Annual % Change]) ? NULL(DT_R8) : 
(DT_STR,10,1252)[Annual % Change] != "." ? (DT_R8)[Annual % Change]: NULL(DT_R8)