2017-06-19 260 views
3

我試圖從Excel導入文件到SQL table。當我從unicode string[DT_WSTR]轉換爲string[DT_STR]與數據轉換我得到一些列上的截斷錯誤。這是輸出錯誤:SSIS截斷錯誤返回狀態4

[Data Conversion [2]] Error: Data conversion failed while converting column "Contact Name" (187) to column "DataContactName" (105). The conversion returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page.".

所以數據流光潔度失敗,但一些行復制到sql table。 有沒有一些解決方法或解決方案?

+2

這取決於您希望解決方案是什麼。你是否想忽略錯誤,因爲你對轉換/截斷沒問題,或者你想知道如何改變你的目標模式以避免錯誤,或者你想確保所有的行都被複制或者沒有他們是? –

回答

1

這裏是你可以做什麼

  1. 如果您確信您的轉換是正確的,Excel中不包含在轉換到非Unicode/ASCII文本,因此不會導致截斷其丟失任何字符,將您的失敗設置從Failure on error更改爲Ignore on error。儘管您應該輸出錯誤並記錄到平面文件以檢查丟失的數據。
  2. 檢查數據表的列;是否足以保存所有可能的excel文件值?如果您不確定,請嘗試將表格列轉換爲VARCHAR(MAX)。如果是由於尺寸原因,現在不應該發生截斷錯誤。其他方法是簡單地選擇VARCHAR(N)的目標大小,其中N = 2 * excel列的最大長度。

您的評論:

I added ignore truncation errors in error output and all rows were copied in sql table. There was no problem to convert characters like ; or "á". Can u brief me what kind of errors i ignored?

我建議你使用上的錯誤輸出的多播轉型改變失敗的設置,從Ignore FailureRedirect Row後。然後將多播中的一個輸出插入到SQL Server中,並將其他插入到平面文件目標中。通過這種方式,您可以將數據導入到SQL服務器以及平面文件中以分析錯誤

+0

我在錯誤輸出中添加了忽略截斷錯誤,並且所有行都在sql表中被複制。轉換字符沒有問題,例如;或「á」。你能告訴我我忽略了什麼樣的錯誤嗎?萬分感謝。 – DraganB

1

看起來像數據轉換中爲DataContactName定義的長度小於「聯繫人姓名」的長度。檢查「聯繫人姓名」列的最大長度並根據該值設置DataContactName大小。您看到插入了幾行,因爲它們可能在更長的數據到達之前插入。

+0

我忽略了錯誤,所有行都被複制到了sql。我檢查過,字符轉換沒有問題,我不知道錯誤是什麼。在將來我應該使用DT_TEXT而不是[DT_STR]? – DraganB