1

我有一个 SSIS 包,其中有四个不同的数据流任务。每个数据流任务(例如 A、B、C、D)具有相同的派生列表达式,并将来自不同 oledb 源的结果附加到相同的 oledb 目标。

对于单独的数据流任务 C,我收到如下错误,并且 A、B 和 D 都没有问题,尽管它们都有相同的派生列表达式。

派生列表达式:

 (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) == (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) ? LEFT([Work item /Submission no#],15) : LEFT([Work item /Submission no#],16)

在 C 的数据流任务上显示 SSIS 错误:

[派生列 [100]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“派生列”失败,因为发生错误代码 0xC0049064,并且“派生列.输出 [派生列输出].列 [提交公共]”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

4

2 回答 2

1

我已经回答了这个问题:

如果您更喜欢 c# 脚本组件(确保添加输入和输出列):

string test = Row.YourRowToTest;
int someNum; //catches output

Row.ColumnName = int.TryParse(test.Substring(4,2),out someNum) == false
                 ?test.Substring(1, 16)
                 :test.Substring(1, 15);
于 2017-12-21T18:46:47.357 回答
1

首先,我假设您正在使用(DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2) == (DT_NUMERIC,18,2)SUBSTRING([Work item /Submission no#],4,2)检查是否SUBSTRING([Work item /Submission no#],4,2)为数字。

我认为由于使用了强制转换操作,您使用的表达式可能会引发错误。因为如果SUBSTRING([Work item /Submission no#],4,2)不是数字,它将引发错误。

只需按照我对这个问题的回答寻求解决方法:SQL script to SSIS expression

于 2017-12-21T18:30:47.353 回答