sql-server - DTS 转换为 SSIS 派生列表达式

标签 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,

我认为对于 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)

这是抛出解析错误,我哪里出错了?

提前致谢。

最佳答案

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

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

关于sql-server - DTS 转换为 SSIS 派生列表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52969430/

相关文章:

batch-file - Bat 文件未运行(比较脚本)

batch-file - 有没有办法同时启动VBS和BATCH脚本

sql-server - 从原始数据创建 n 个新行,例如 (1000....1000+n)

json - POST 以获取 Trustpilot API 访问 token 挑战

sql - 递归 CTE 查询生成产品或页面层次结构

sql-server - SQL Server 的用户访问日志

sql - 我可以关闭 SSMS 但保持存储过程运行吗?

ssis - 如何读取以小写 thorn 作为分隔符的平面文件

sql - SSIS 在控制流任务之间传递数据源

SQL Server 忽略 where 表达式中的大小写