欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-05-13 18:01:48
...
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