我有一个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,并且“派生列 . 输出[派生列输出] .Columns [SubmissionCommon]”上的错误行处置指定错误失败 . 指定组件的指定对象发生错误 . 在此之前可能会发布错误消息,其中包含有关失败的更多信息 .
2 回答
首先,我假设你使用
(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
我已经回答了这个问题:
如果你更喜欢c#script组件(确保添加输入和输出列):