1. 程式人生 > >解決將Excel表匯入到SQL Server資料庫時出現Text was truncated or one or more characters had no match in the target code錯誤

解決將Excel表匯入到SQL Server資料庫時出現Text was truncated or one or more characters had no match in the target code錯誤

編寫python爬蟲程式可以在電商、旅遊等網站上爬取相關評論資料,這些資料可以用於詞雲製作、感情詞分析、提取關鍵詞等,也可以將爬取下來的資料以自己的方式進行展示。評論資料爬取下來後,就要考慮怎樣入庫,可以在爬蟲程式中編寫程式碼直接入庫,也可以將爬取到的資料存到Excel表格中,再將Excel表格匯入到資料庫中。在將Excel表格匯入到SQL Server資料庫時可能會出現很多錯誤,這裡要解決的錯誤是:Text was truncated or one or more characters had no match in the target code。這是由於欄位大小(size)設定過小,而資料中有超過這個size的記錄從而導致了截斷(truncate)。

在SSMS中,可以編寫SQL語句或使用選單建立資料表,併為表中的欄位設定大小(size)。在將Excel表格匯入到資料庫時,欄位的大小又是怎麼確定的呢?在Excel表格中,第一行的各列值作為資料表(指資料庫中的table)中的各欄位名,第二行以後的每一行的記錄將作為資料表中的記錄。下面兩張圖反映了Excel表中資料和資料表中資料的對應關係。

景點概覽示例

景點概覽示例2

我們在SSMS中開啟“景點概覽”資料表的設計檢視,檢視各欄位的大小(size)。

資料表中各欄位的大小

Excel表在匯入到資料庫後,欄位的Data Type(資料型別)是根據Excel表中第二行(即第一條記錄)的值推出的。如果第二行對應列的那個值是數字,資料庫中相應欄位的Data Type就是float型,如果值是字元,相應欄位的Data Type就是nvarchar(255)。將數字都作為float型,將字元都作為nvarchar(255)型可以避免一些截斷問題或高精度向低精度轉換等問題的出現。但如果某一個欄位的Data Type被設定成了nvarchar(255),而表中又有記錄的值的大小超過了255,那麼就會出現文章開頭所說的truncate(截斷)問題。所以,將Excel表格的各條記錄中,最長的那條記錄放到Excel表格的第二行(即第一條記錄的位置),就可以解決上面所說的問題

一、準備Excel表格資料

  Excel表格是可以匯入到SQL Server的,但是WPS表格是不行的。準備好Excel表格後,另存為成合適的格式(Excel 2003或當前的Excel版本號,後面會用到)。這裡儲存成Excel 2003(.xls)的格式。使用的資料是夫子廟景區的評論資料,首行只有一個欄位“評論”。

  將Excel表格另存為合適的格式

  夫子廟景區評論

二、在SSMS中建立資料庫並匯入Excel表格

  開啟SSMS,建立資料庫,右鍵資料庫-Tasks-Import Data,開啟SQL Server Import and Export Wizard。

  右鍵資料庫匯入Excel

  SQL Server Import and Export Wizard

  選擇Data source資料來源為Microsoft Excel表格,選擇準備好的Excel檔案,在Excel version中選擇相應的版本號。已自動勾選的First row has column names表示Excel表格中首行作為欄位值。

  選擇要匯入的Excel表格

  選擇匯入Destination為:SQL Server Native Client,Server name是當前SQL Server連線的服務名,應該是自動出現的,Authentication選擇登入方式(Windows身份驗證或SQL Server身份驗證),Database選擇Excel表匯入到的資料庫。

  選擇要匯入到的資料庫

  選擇全部匯入或者編寫SQL語句部分匯入(我也不是很明白..)。這裡選擇:Copy data from one or more tables or views,全部匯入。

  全部匯入或query選擇匯入

  Next之後,選擇Excel表中的工作簿(這裡只有一個夫子廟)。

  選擇夫子廟表

  點選Edit Mappings,可以看到“評論”欄位的Data Type被設定成了nvarchar(255)。這裡要注意,雖然在這裡Size這個值是可以更改的,但是即使改為max後依然匯入失敗(沒有解決)。

  檢視夫子廟評論欄位的size

  繼續後續步驟,執行匯入。

  後續步驟1

  後續步驟2

  點選完成,匯入失敗,查看出錯日誌。

  報錯

三、整理Excel表格資料重新匯入

  上面的Excel表格匯入失敗了,在整理表格之前,要在SSMS中將失敗的資料表刪掉(雖然失敗了,但是資料表的框架已經建立了)。如果對錶格進行SELECT查詢,結果是空的。

  查詢到了空結果

  開啟Excel表格,找到最長的那條記錄,並將其移動到第二行。

  找到最長的那條記錄

  將最長的那條記錄移到第二行

  重新匯入到資料庫,這次匯入成功了。

  檢視夫子廟評論欄位的size2

  匯入成功

  在SSMS中,SELECT查詢剛才匯入進來的資料。Excel表格匯入進來的資料表的名字是Excel表中資料簿的名字後+"$"符號。

  查詢剛才匯入進來的資料

四、總結

  在將Excel表格匯入到SQL Server資料庫時如果出現:Text was truncated or one or more characters had no match in the target code 這個錯誤,將Excel表中最長的那條記錄移到第二行即可(即第一條記錄所在行)解決匯入失敗的問題

  另外,SQL Server資料庫的匯入匯出功能還可以實現資料庫中資料匯出到Excel表或其他一些資料來源之間的相互匯入匯出,讀者可以進行嘗試。