【问题标题】:Derived column failures due to error codes DTS_E_INDUCEDTRANSFORMFAILUREONERROR 0xC0049067 and DTS_E_PROCESSINPUTFAILED 0xC0209029由于错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR 0xC0049067 和 DTS_E_PROCESSINPUTFAILED 0xC0209029 导致派生列失败
【发布时间】:2018-05-22 17:00:43
【问题描述】:

我一直在开发一个 SSIS 包,我已经为其添加了派生列(我之前已在此处发布过)。我遇到的问题是这个子包在一个环境中运行良好,但由于某种原因,在我的开发环境中失败了。

发生的错误是:

“SSISError 代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。“组件“DerivedColumn”(9567)”失败,因为发生了错误代码 0xC0049067,并且“输出列“SchemaID”(9744)”上的错误行处置指定了错误失败”和“SSISError 代码” DTS_E_PROCESSINPUTFAILED。组件“派生列”(9567) 上的 ProcessInput 方法在处理输入“派生列输入”(9568) 时失败,错误代码为 0xC0209029。识别的组件从“进程输入方法”返回错误。

我比较了表的字段,尤其是两种环境中的 SchemaID,它们是相同的。我什至尝试在 Dev 中重新创建特定表并重新尝试运行包,但无济于事。

这是派生列转换编辑器屏幕:

任何人都可以对此提出任何建议吗?先感谢您!

【问题讨论】:

  • 您确定 SchemaID 转换总是返回少于 13 个字符的所有内容吗?

标签: sql-server ssis etl derived-column


【解决方案1】:

很可能是它的错误数据没有通过您的派生转换进行转换。理想的做法是创建一个测试表并将 SchemaID 列的数据类型更改为 varchar 并获取其中的所有数据。您可以更轻松地调试问题。或者,您可能希望打开派生列的“高级编辑器”选项卡并更改输入 schemaID 的数据类型或其长度(不管它是 int 还是其他不支持长度的东西)。

【讨论】:

    【解决方案2】:

    SchemaId 表达式如下:

    SUBSTRING((DT_WSTR,15)PCMRetrievalCode,3,FINDSTRING(((DT_WSTR,15)PCMRetrievalCode),"C"C,1) - 3)
    

    我认为问题是由FINDSTRING 函数引起的。如果PCMRetreievalCode 列不包含"C" 或者它将返回索引< 3,那么FINDSTRING(((DT_WSTR,15)PCMRetrievalCode),"C",1) - 3 将抛出异常,因为在SUBSTRING 函数中,长度参数应该是正数。

    您可以添加条件? : 来解决问题:

    FINDSTRING(((DT_WSTR,15)PCMRetrievalCode),"C",1) >= 3 ? SUBSTRING((DT_WSTR,15)PCMRetrievalCode,3,FINDSTRING(((DT_WSTR,15)PCMRetrievalCode),"C"C,1) - 3) : ""
    

    另一个建议是将列长度增加到 13 以上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2018-07-11
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      相关资源
      最近更新 更多