2016-04-29 183 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

我並不贊同你 - 消息是一個'或' - 它通常是一個截斷,這可以通過改變截斷輸出來重定向行和啓用數據查看器錯誤輸出 - 我將編輯我的答案以顯示我的意思...... –