首页 文章

表达式上的SSIS派生列错误

提问于
浏览
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,并且“派生列 . 输出[派生列输出] .Columns [SubmissionCommon]”上的错误行处置指定错误失败 . 指定组件的指定对象发生错误 . 在此之前可能会发布错误消息,其中包含有关失败的更多信息 .

2 回答

  • 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

  • 1

    我已经回答了这个问题:

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

    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);
    

相关问题