2013-07-02 226 views
3

我有一個SQL Server 2005 SP2數據庫,其中有一個poc_resp_city屬性的表nvarchar(35)SSIS字符串截斷錯誤

2個月前更改爲nvarchar(80),未對齊數據倉庫中的相同屬性。 (仍然具有nvarchar(35)

的SSIS數據加載包(後正常工作兩個月)現在每次還給封裝失效我下面的錯誤運行:

There was an error with output column "poc_resp_city" (2250) on output "OLE DB Source Output" (11). The column status returned was: "Text was truncated or one or more characters had no match in the target code page.". There was an error with output column "poc_resp_city" (2250) on output "OLE DB Source Output" (11). The column status returned was: "Text was truncated or one or more characters had no match in the target code page.".

SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Source Table" (1) 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.

無論是包裝還是數據庫已就此問題進行了修改。我知道我可以忽略這個錯誤,或者我可以做出安排以確保它的工作正常,但是我想提供一個正確和可接受的答案,說明修改後2個月出現此錯誤的原因。因爲也許我錯過了這種情況下的重要一步。

重要說明:我甚至沒有超過35個字符的單個記錄,所以截斷不會發生。 (這個警告屬於某種SSIS驗證步驟)

現在我想也許經過一段時間後,SSIS包會自行重新編譯,現在它會在元數據(35 =/= 80)中看到這種不對齊,並且因爲TruncationRowDisposition屬性設置爲RD_FailComponent,它會使組件失效。

而且我會排除代碼頁選項,因爲每個數據庫列都是nvarchar而不是varchar,所以這不應該是這種情況。

謝謝!

+0

你在源表檢查MAX(LEN())?我想你會以某種方式選出一個超過35個字符的記錄,也許不會打印或尾隨空格。這似乎比自發重新編譯的解釋更可能,儘管SSIS 2005比較老,總是比2008或2012年更怪異。 – criticalfix

+0

我檢查了它並檢查了LEN(城市+'a')也忽略了空格。 (因爲LEN('aa')和LEN('aa')返回相同的值,並且沒有超過35的記錄 – dn7123

回答

0

需要刷新柱尺寸:

  1. 右按鈕按下OLE DB Source -> Show Advanced Editor
  2. 選擇Input and Output Properties選項卡 - >Ole DB Source Output - >Output Columns
  3. 在右側面板中Length行插入新的大小。
  4. OK

Show Advanced Editor

或者你可以從OLE DB Source複製您的查詢,刪除OLE DB Source,插入新OLE DB Source和粘貼查詢。這會自動刷新你的列。

只記得什麼有在數據流,你需要編輯列的長度,就像Data Converion可能更多的元素......

+0

是的,我知道我可以使用高級編輯器並設置數據長度到適當的一個。 但是從客戶的角度來看,我必須給出一個正確的理由,爲什麼在兩個月的錯位之後,SSIS出現這個錯誤。 – dn7123

+0

您可以將查詢數據分成兩半,並觀察錯誤是否增加。然後再次分裂錯誤是在一半,直到你找到一行引發錯誤:) – Justin

+0

沒有SQL Server錯誤。此錯誤僅由SSIS的元數據驗證任務顯示。 – dn7123