Ssis

SSIS - Excel 目標不允許超過 255 個字元

  • December 14, 2018

我的 SSIS 包有一個 ado.net 源,它返回寬度超過 2000 個字元的列,但是當將輸出重定向到 excel 目標時,這些列會被截斷。

任何想法,如何解決這個問題..?

我正在使用 excel 2007 作為 excel 目標。

SSIS Excel 數據源:

輸出“Excel 源輸出”(5596) 上的輸出列“註釋”(5691) 出錯。

返回的列狀態為:

“文本被截斷或目標程式碼頁中的一個或多個字元不匹配。”

此錯誤的原因:

  1. 該錯誤是由於 excel 中的冗長數據造成的。
  2. SSIS 有一個內置的邏輯來掃描電子表格中的數據。它將掃描前 8 行,並在此基礎上編寫一個邏輯來為包建構表的邏輯。如果您的冗長數據不在第 8 行中,那麼您的 ssis 將不會響應它。

考慮到我有一個名為“名稱”的列,前 8 行的長度 <255 第 9 行的長度 > 255。在執行包時,您將收到上述錯誤,這是因為您的輸入值將被截斷,而 SSIS 不允許這樣做. 在這種情況下,可以遵循兩種類型的邏輯,

選項1:它很棘手,只需將第 9 行複製到頂部(可能為 1 行)。現在嘗試使用導入/導出嚮導創建您的包。您的 ssis 將創建寬度為 nvarchar(Max) 的列,最多可接受 2 GB。

Option2:更改Preparation SQL任務查詢,將數據類型更改為varchar(Max)並修改excel源->高級編輯器,更改輸出列類型和長度以及外部列類型和長度。

請閱讀部落格

對於那些稍後搜尋此問題的人,解決此問題的最簡單方法是右鍵點擊 Excel 目標 –> 高級編輯器 –> 組件屬性(頁面) –> 驗證外部元數據 = False。然後轉到輸入和輸出屬性頁面並設置外部列的長度 - 現在它允許您將其更改為適當的數據類型和長度而無需重置它。此解決方案避免了必須操作採樣記錄或更改系統資料庫項。

編輯:如果您使用 32 位 Excel,還要檢查您是否有 32 位 Excel 驅動程序(Microsoft Access Database Engine 2010 Redistributable),並在項目級別(右鍵點擊項目,而不是包,然後選擇屬性)轉到配置屬性 –> 調試,並將 Run64BitRuntime 更改為 FALSE。如果你有這個案例(32 位 Excel),你會追著你的尾巴好幾個小時,以為問題出在數據類型驗證上。

引用自:https://dba.stackexchange.com/questions/73060