首页 >数据库 >mysql教程 >EXCEL长度超过255个字符导入SQL SERVER2005的方法

EXCEL长度超过255个字符导入SQL SERVER2005的方法

WBOY
WBOY原创
2016-06-07 17:48:041287浏览

excel长度超过255个字符导入sql server2005的方法
[excel 源 [1]] 错误: 输出“excel 源输出”(9) 上的 输出列“description 3”(546) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。

该列在excel中最长为308个字符,但是excel源中的外部列和输出列最多只能设为nvarchar(255),如果设定长度超过255,则出现警告,源列属性不匹配,执行也通不过。使用ntext类型也尝试过,不匹配。

我使用ado.net倒是把它倒入到了,但是发现所有超过255的都被截断了。

原因分析:

   ado和ssis的excel源对数剧列的长度的判定存在问题。

解决方案一:

      把excel转换成csv格式,然后使用平面文件源导入数据库。

      需要注意两点:

      1、输出列长度需要手动修改。

      2、注意不同语言造成的unicode字符转换问题,必要时先切换系统语言,再作转换。

解决方案二:

     将注册表中

jet引擎.
hkey_local_machinesoftwaremicrosoftjet4.0enginesexcel

如果是:ace引擎.
hkey_local_machinesoftwaremicrosoftoffice12.0access connectivity engineenginesexcel

下的typeguessrows 项的值设置为0

windows server 2003 系统注册表中,jet项位于hkey_local_machinesoftwaremicrosoftwow64node下

原因是驱动默认情况下根据列的前8行数据判定列长度,修改为0后需要检查整列数据来判定列长度,超过255个字符默认为ntext格式,少于255个字符则默认为nvarchar(255)。

添加一个数据流.在数据流里.添加一个oledb源.

新建一个excel的oledb源.在这里就不说了.

只需要将provider设置为microsoft ace oledb.然后选择excel文件.

然后设置extended properties属性为excel 12.0;hdr=yes

解决方案三:

         使用函数将长度超过255个字符的列切割为多个少于255的列,导入数据库后在进行合并。

         注意excel的选择性粘贴功能。

        可用函数:left ,mid

经过我测试,通过!

下载注册表文件

select len(convert(varchar(1000),人员分工)),*  from opendatasource( 'microsoft.jet.oledb.4.0','data source="c:book1.xls";user id=admin;password=;extended properties=excel 5.0')...[sheet1$]order by len(人员分工) desc--select * from table1
select len(人员分工),* from openrowset('microsoft.jet.oledb.4.0', 'excel 8.0;hdr=yes;imex=1;database=c:book1.xls', 'select 人员分工,* from [sheet1$]') order by len(人员分工) descselect * from openrowset('microsoft.ace.oledb.12.0', 'excel 12.0;hdr=yes;imex=1;database=c:book1.xls', [sheet1$])  order by len(人员分工) desc
select len(人员分工),* from opendatasource('microsoft.ace.oledb.12.0', 'data source=c:book1.xls;extended properties="excel 12.0;hdr=yes;imex=0"')...[sheet1$]order by len(人员分工) desc

 

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn