【问题标题】:DTS Conversion to SSIS Derived Column ExpressionDTS 转换为 SSIS 派生列表达式
【发布时间】:2018-10-24 12:47:41
【问题描述】:

有人要求我将 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,

我认为对于 Period 列,它应该只是 (DT_I1)REPLACE([Period],"Q","")

对于 [Annual % Change] 列,我已尝试对其进行分解,我认为该列:

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)

这是抛出解析错误,有什么想法我哪里出错了吗?

提前致谢。

【问题讨论】:

  • 我怀疑这些:NULL(DT_R8) 如果您从中删除“(DT_R8)”会怎样?
  • 它仍然不喜欢它,但它似乎是因为我的派生列没有被更改以匹配目标数据类型。

标签: sql-server vbscript ssis derived-column


【解决方案1】:

在 SSIS 表达式语言中,不等于是 !=。 不起作用。我对你的表情做了那个改变,它对我有用。

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

【讨论】:

  • 谢谢杰里米,我昨晚偶然发现了这个,我也没有将数据类型与目的地匹配,我刚刚设法让它流动:(DT_DECIMAL,2)([Annual % Change] != "" ? [Annual % Change] == "." ? NULL(DT_DECIMAL,2) : (DT_DECIMAL,2)[Annual % Change] : NULL(DT_DECIMAL,2))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
相关资源
最近更新 更多