昨天將excel表格中的數據導入數據庫時遇到以上問題,老是提示數據被截斷之類的錯誤,google了一下,出來好多解決方案,什麼修改註冊表啊,什麼excel格式不對了,修改excel文件後綴了,總之就是很多方法。但是一一實踐下來就是不行。尤其是我們公司那個加密系統,你修改一下表格,它又給你加密了,又得去申請解密,不勝其煩。
好在黃天不負有心人,最後終於找到了解決辦法:那就是向你要導入數據庫的excel表格中手動加入一行,最好是將加入的那一行的字符串寫足夠多一點,這樣就能生成合適的數據類型。
原因分析:當我們將excel文件導入數據庫時會在數據庫自動生成一張表,表中的字段對應excel中的每一列,那麼問題來了,每一列的數據類型及大小是怎麼來的呢,excel導入數據庫時默認字段類型是varchar型,而大小的確定時根據你excel表格中數據的前三行,當然有的說是前八行,這個看要看你電腦註冊表上是多少了。當然有的人說改一下註冊表不就好了,但是我根據網上的目錄:
如果是:Jet引擎. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
如果是:ACE引擎.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel
然後找到 TypeGuessRows這個項.默認爲8的.修改爲0.
然後我發現了,居然找不到這個目錄:就沒辦法通過註冊表去修改了。數據被截斷究其原因無非是字段大小設置小了,導致這一列中有的數據沒法放入這個字段,那麼解決辦法就出來:我們是不是可以在excel表格手動添加第一行,將字符儘量的寫大,sqlserver在判斷的時候就會自動生成相應的數據類型的大小!導入數據庫之後將第一行數據刪掉就可以了。這樣問題就圓滿解決了。
要將一張表中的數據複製到另一張表:
已經創建表