2012年7月2日 星期一

[SSIS]文字檔裡因換行字元不同所造成的錯誤



        上圖左右各是兩個文字檔,都只有一個長度為10的欄位,左右皆用雙引號包夾,乍看之下真的看不出什分別,但是用同樣的SSIS封裝將文字檔載入資料表,右邊的成功載入,但左邊的卻載入失敗,出現如下錯誤訊息

        [一般檔案來源[253]] 錯誤資料轉換失敗。資料行"資料行0" 的資料轉換傳回狀態值和狀態文字"文字已截斷,或者一個或多個字元在目標字碼頁裡沒有相符者。"



        此錯誤訊息通常是來源端欄位長度超出目的端欄位長度造成的,但我不管怎麼看,雙引號所包夾的字串長度我很肯定就是10碼啊!

        一開始我還懷疑是文字檔編碼有差異,但兩個都是ANSI,那難道是文字檔裡夾雜著看不見的符號嗎?於是我將Notepad2設成顯示所有字元,一看之下恍然大悟,原來是換行字元不同啊!


        不過我覺得明明是換行字元(資料行分隔符號)的錯誤,為什是顯示上面那個文字已截斷的錯誤呢?後來我試了幾種狀況,發現也是會出現換行字元的錯誤的,如下:


[一般檔案來源[239]] 錯誤: 找不到資料行"資料行0" 的資料行分隔符號。


        至於是哪幾種狀況會出現錯誤我就不列了,因為遇到這機會的很少啊,像我的狀況是跨公司資料傳輸,為了測試方便請對方先給我檔案,但之後會透過加密傳輸機制提供檔案給我,雙方又剛好是Unix Like與WINDOWS的系統,碰巧因傳輸機制不同造成檔案換行字元不同囉,提供給各位參考 


4 則留言:

  1. 回覆
    1. 一般文字編輯器像Notepad2,本身就可以將換行字元(Line Endings)任意轉換為Windows與Unix囉

      刪除
  2. 請教前輩:
    我使用notepad2開啟CSV檔後,要如何將換行字元轉換為windows or unix呢?
    謝謝

    回覆刪除
    回覆
    1. 工具列File/Line Endings/就可以選了

      刪除