2016-04-29 180 views
0

首先,我已经搜索,搜索和搜索,没有找到任何帮助我的东西。SSIS截断错误

我有一个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 - 在屏幕上沮丧(没有帮助)。

我在路边。我不知道该做什么了。帮帮我...?

回答

1

您可能发现在源编辑器对话框中将“错误输出截断”设置为“忽略失败”可解决您的问题。

Ignore Truncation "Error"

更新 - 截断重定向: -

上姓强制截断 - 输出设置为重定向 并启用数据查看器上的错误输出

DTSX wif redirect set on name

然后复制的行从数据查看器到记事本以显示错误

Row copied to notepad to show error

运行相同DTSX WIF截断集失败: -

Package failure

+0

OMG!谢谢!看起来有点危险,但它有效。 –

+0

它应该允许你确定你的值是否超出你定义的字段长度(S)。如果你看到我的意思! - 问题可能不在你的定义中,而是在数据本身..... –

+0

@ Mr.Glaurung ...这可能(可能)不是一个永久的答案......它应该是Supa Stix为你提供的一种方式找出不匹配的地方 – Charles

1

是的,这完全令人发狂。

还有两个 OLE DB源输出下的列集:“外部列”和“输出列”。

你有没有试图改变列的长度 - 列“名称”下,外部列”,然后在‘输出列’

这种错误往往是从一个错配发生在外部列定义之间其相应的输出列

在一个OLE DB源中,外部列应该根据源数据类型自动输入:外部提供者应该向元数据交换SSIS,并说“好吧,这个列是输入的字符串(40)“,例如,但是提供者或者SSIS经常被称为”不完全胜任“ s和长度正确。

更新:您是否尝试过独立于SSIS检查源中数据的长度?类似于:

SELECT MAX(Len(TheReallyAnnoyingColumn)) FROM TheTable 
+0

是的,在两个地方都改变了......仍然没有工作。 :( –

0

别人都集中在截断。我很好奇一个或多个字符在错误信息的目标代码页部分中没有匹配。

该列是如何在IBM i上实际定义的?我特别感兴趣的是编码字符集标识符(又名CCSID)

在绿色屏幕中,您可以使用显示文件字段描述(DSPFFD)命令。 DSPFFD screen shot

您也可以使用iNav GUI。
iNav Screenshot

+1

我并不赞同你 - 消息是一个'或' - 它通常是一个截断,这可以通过改变截断输出来重定向行和启用数据查看器错误输出 - 我将编辑我的答案以显示我的意思...... –