2

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

发生的错误是:

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

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

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

在此处输入图像描述

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

4

2 回答 2

0

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

于 2018-05-22T17:05:24.323 回答
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 以上。

于 2018-05-23T01:05:44.523 回答