excel數據導入sqlserver中時報文本被截斷,或者一個或多個字符在目標代碼頁中沒有匹配項


昨天將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在判斷的時候就會自動生成相應的數據類型的大小!導入數據庫之後將第一行數據刪掉就可以了。這樣問題就圓滿解決了。

要將一張表中的數據複製到另一張表:

已經創建表

1. table1和table2表結構相同

use b

insert into table2 select * from a.dbo.table1

2. table1和table2表結構不相同

use b

insert into table2(c1,c2) select c1,c2 from a.dbo.table1

coolxiaoyi:c1,c2爲需要複製的列。

3. 如果還沒有創建表table2,可以直接將table1的表結構和記錄都複製到數據庫b中

use b

select * into table2 from a.dbo.table1




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章