由于错误代码导致的列失败DTS_E_INDUCEDTRANSFORMFAILUREONERROR 0xC0049067和DTS_E_PROCESSINPUTFAILED 0xC0209029

时间:2018-05-22 17:00:44

标签: sql-server ssis etl derived-column

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

发生的错误是:

  

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

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

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

enter image description here

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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以上。