SSIS派生列(查找字符串)

时间:2017-06-07 14:12:39

标签: sql-server ssis etl

我从'Notes'列中提取模式,我正在从注释中寻找字母数字字(MXPC123456),我想将输出存储在新列中。因此,我正在使用Derived ColumnFindString()函数。

我在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

1 个答案:

答案 0 :(得分:1)

有两件事可能导致此错误:

  1. TEXT_LINE1不包含"MXPC"字符串,因此FINDSTRING(TEXT_LINE1,"MXPC",1)将返回0SUBSTRING函数将引发异常
  2. TEXT_LINE1包含"MXPC"字符串,但FINDSTRING返回值后没有10个字符
  3. TEXT_LINE1 IS NULL
  4. 所以你可以为这个表达式添加一些验证

     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)  : ""))