2011年8月18日 星期四

錯誤:轉換傳回狀態值 4 和狀態文字[文字已截斷,或者一或多個字元在目標字碼頁裡沒有相符者。]。

  錯誤: 將資料行 "Latitude" (250) 轉換成資料行 "Latitude" (156) 時,資料轉換失敗。  轉換傳回狀態值 4 和狀態文字 "文字已截斷,或者一或多個字元在目標字碼頁裡沒有相符者。"。
  英文的錯誤訊息
The data conversion for column "value" returned status value 4 and status text "Text was truncated or one or more characters had no match in the target code page".

  上面這錯誤,今天在設計SSIS封裝時遇到了兩次,特別紀錄一下解決方法,先說明我的資料來源都是文字檔,資料流程如下圖

  第一種解法是忽略此錯誤,從完整的錯誤訊息可以知道是發生在哪個元件上,然後在發生錯誤的元件上按右鍵選[顯示進階編輯器],切換[進階編輯器]視窗到[輸入與輸出屬性],在[資料轉換輸出],點開[輸出資料行]的Latitude,在右邊通用屬性窗格,確定ID是156(與錯誤資料行的識別碼相同),在[TruncationRowDisposition]處改成[RD_IgnoreFailure],就忽略這錯誤了,再執行一次,你會發現資料似乎成功轉進去了

  這種解法雖可將資料轉進去,但資料有會被截斷的風險喔,去看轉進去的資料,如下圖(一),因為此筆有問題的資料前面多了一碼空白,最後就會少一碼啦

圖(一)

  第二種解法是針對那個會被截斷的欄位擴增長度,我覺得這適用在開發測試階段,比較容易擴增欄位長度啦,但若只是針對一筆有問題的資料就擴增欄位,實在很浪費資料表空間的

  第三種是找出錯誤的關鍵點,到底是哪些資料有問題,從源頭去修正,我們可以利用錯誤輸出將有問題的資料導向另一個輸出

  作法很簡單,再拉一個一般檔案目的地進去當作錯誤記錄檔,將那個發生問題的元件的紅箭頭拉到一般檔案目的地去,此時會跳出如下視窗,如下圖(二)
圖(二)

將原本[失敗元件]全改成[重新導向資料列]即可,如下圖(三)

圖(三)

然後再設定一下這錯誤紀錄的連接即可,執行看看,如下圖(四),你會發現有一筆資料轉到錯誤記錄檔去了
圖(四)

  去打開那錯誤記錄檔,會告訴你發生錯誤的那行資料錯誤號碼及錯誤資料行的識別碼,這樣很容易找出問題,像我這轉檔才轉56筆資料,要找出那筆前面多了一碼空白的資料,就看得我眼睛快脫窗了還看不出來,更何況資料一多怎麼辦,供參考囉

0 意見:

張貼留言