首先,我进行了搜索,搜索和搜索,没有找到任何可以帮助我的事情。
我有一个SSIS项目,它将从iSeries AS400中获取大量数据,并且它在两个非常不同的步骤中执行此操作。 第1步完美无缺,因此我设法从AS400获取大量信息,因此连接本身不是问题。
第二步失败的可能是以下三个错误代码:
[OLE DB Source [41]] Error: There was an error with OLE DB
Source.Outputs[OLE DB Source Output].Columns[NAME] on OLE DB
Source.Outputs[OLE DB Source Output]. The column status returned was: "Text
was truncated or one or more characters had no match in the target code
page.".
[OLE DB Source [41]] Error: The "OLE DB Source.Outputs[OLE DB Source
Output].Columns[NAME]" failed because truncation occurred, and the
truncation row disposition on "OLE DB Source.Outputs[OLE DB Source
Output].Columns[NAME]" specifies failure on truncation. A truncation error
occurred on the specified object of the specified component.
[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The
PrimeOutput method on OLE DB Source returned error code 0xC020902A. The
component returned a failure code when the pipeline engine called
PrimeOutput(). The meaning of the failure code is defined by the component,
but the error is fatal and the pipeline stopped executing. There may be
error messages posted before this with more information about the failure.
我拼命想找到这个问题的解决方案,这就是我所做的(根本没有帮助):
1 - SOURCE的高级编辑 - >选项卡:输入和输出属性 - > OLE DB源输出 - >输出列已更改为 a)40(从28)长度 - 没有变化 b)数据文本(来自字符串) - 完全崩溃 c)将代码页从1251更改为UTF-8 - 无变化
2 - 在MSSMS中使用OPENQUERY获取信息,效果非常好。
3 - 在屏幕上沮丧地尖叫着(没有帮助)。
我在路边。我不知道该怎么办了。帮助...?
答案 0 :(得分:1)
是的,这完全是令人抓狂的。
OLE DB源输出下有两个列:"外部列"和"输出列"。
您是否尝试更改两个列的长度 - 列"名称"在外部列下"并在"输出列"?
这种错误通常是由于外部列定义与其相应的输出列不匹配所致。
在OLE DB源中,外部列应该根据源数据类型自动输入:外部提供者应该将元数据与SSIS对话,说"好吧,这个列是键入的字符串(40 )",例如。但是,无论是提供者还是SSIS,通常,我们都会说,"而不是完全胜任的#34;获得正确的类型和长度。
更新:您是否尝试过独立于SSIS检查来源中的数据长度?类似的东西:
SELECT MAX(Len(TheReallyAnnoyingColumn)) FROM TheTable
答案 1 :(得分:1)
您可能会在源编辑器对话框中找到将截断的错误输出设置为"忽略失败"帮助您解决问题。
更新 - 截断重定向: -
在surname上强制截断 - 输出设置为重定向 并在错误输出上启用了数据查看器
然后将数据查看器中的行复制到记事本以显示错误
将相同的dtsx wif截断设置为失败: -
答案 2 :(得分:0)