excel数据导入sqlserver中时报文本被截断,或者一个或多个字符在目标代码页中没有匹配项

时间:2021-03-11 09:34:32


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