我一直在研究SSIS软件包,我已经为其添加了派生列(我之前在此处发布过)。我遇到的问题是这个子包在一个环境中运行良好,但由于某种原因,在我的Dev环境中失败了。
发生的错误是:
" SSISError代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 "组件" DerivedColumn" (9567)"失败,因为错误代码0xC0049067发生,错误行处置"输出列" SchemaID"(9744)"指定错误失败"和" SSISError代码DTS_E_PROCESSINPUTFAILED。组件"派生列"上的ProcessInput方法(9567)在处理输入"派生列输入"(9568)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误"。
我比较了表格的字段,特别是两种环境中的SchemaID,它们完全相同。我甚至尝试在Dev中重新创建特定的表并重新尝试运行该包,但无济于事。
这是派生列转换编辑器屏幕:
有人可以对此提出任何建议吗?先感谢您!
答案 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以上。