我从'Notes'列中提取模式,我正在从注释中寻找字母数字字(MXPC123456),我想将输出存储在新列中。因此,我正在使用Derived Column
和FindString()
函数。
我在Drived Column
包中的SSIS
中使用以下表达式运行此代码时收到错误:
(DT_WSTR,255)SUBSTRING(TEXT_LINE1,FINDSTRING(TEXT_LINE1,"MXPC",1),10).
不知道我做错了什么。
错误:获取DC Coms数据时的0xC0049067,派生列[67]:评估函数时发生错误。
错误:获取DC Coms数据时的0xC0209029,派生列[67]:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “组件”派生列“(67)”失败,因为发生错误代码0xC0049067,并且“输出列”CKT_MX“(91)”上的错误行处置指定错误失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
错误:获取DC Coms数据时的0xC0047022,SSIS.Pipeline:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“派生列”(67)上的ProcessInput方法在处理输入“派生列输入”(68)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
你能帮忙吗?
此致 Prab
答案 0 :(得分:1)
有两件事可能导致此错误:
TEXT_LINE1
不包含"MXPC"
字符串,因此FINDSTRING(TEXT_LINE1,"MXPC",1)
将返回0
而SUBSTRING
函数将引发异常TEXT_LINE1
包含"MXPC"
字符串,但FINDSTRING
返回值后没有10个字符TEXT_LINE1
IS NULL 所以你可以为这个表达式添加一些验证
ISNULL([TEXT_LINE1]) == TRUE ? "" : (FINDSTRING([TEXT_LINE1],"MXPC",1) == 0 ? "" :
(LEN([TEXT_LINE1]) >= FINDSTRING([TEXT_LINE1],"MXPC",1) + 9 ? SUBSTRING([TEXT_LINE1],FINDSTRING([TEXT_LINE1],"MXPC",1),10) : ""))