您正在ssis包中使用以下exression !ISNULL((DT_I4)路线)? (DT_WSTR,50)(“SB”+ SUBSTRING(右(路线,2),1,1)):( DT_WSTR,50)路线
当Route值为Numeric时,它是成功的,当它是非数字失败时 以下描述。任何帮助,如何解决此问题
[派生列[111]]错误:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “组件”派生列“(111)”失败,因为发生错误代码0xC0049067,并且“输出列”column_New“(679)”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“派生列”(111)上的ProcessInput方法在处理输入“派生列输入”(112)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
答案 0 :(得分:1)
条件语句“(DT_I4)Route”的以下部分正在尝试将Route转换为4字节整数。您不需要将Route转换为DT_I4来测试Null。
编辑 -
我错过了你试图测试非数字。
所以我会这样做:
在派生列中,转换有一列具有表达式(DT_I4)Route
的列和一列表达式为(DT_WSTR,50)Route
的列
在从(DT_I4)Route
派生的列上,将错误输出设置为重定向行
在错误输出流上有一个使用该表达式的第二个派生列
(DT_WSTR,50)("SB" + SUBSTRING(RIGHT(Route,2),1,1))
的名称与第一个派生列转换中的列相同,并使用Union ALL将它们合并回来。
从我的测试中,您使用的表达式在遇到错误时立即返回null(并且将非数字转换为DT_I4是一个错误),但前提是您的错误输出设置为fail组件以外的其他内容。忽略失败将不起作用,因为您将为整数表达式获取null,其中值为非数字。