SSSI导EXCEL数据常见问题一

在使用SQL SERVEREXCEL导入到数据库中的时候.经常会发生一些问题.会让我们有些感觉到莫名其妙.

今天在论坛上.一个朋友在使用SSISEXCEL导入到SQL SERVER的数据库内的时候.发生了这个错误:

Excel [1]] 错误: 输出“Excel 源输出”(9) 上的输出列“Description 3”(546) 出错。返回的列状态是:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。

 

据他的描述是这样子的:

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

 

 

我们来分析一下.出现这个错误可能的原因是:默认情况下..JET引擎或ACE引擎它会抽取EXCEL工作表中的前8行记录来解释每个列的数据类型.如果字符型的占这8行的比例多.那就会解释为字符类型.而且如果这8行记录中.如果长度少于或等于255.那就会解释为nvarchar(255),否则会解释为ntext

 

为了验证这一点.我们来做一个测试:

 

在这个Excel的工作表当中.A17的内容远远超过255个字符.

我们现在需要将这个工作表的数据导入到数据库当中.

 

我们先在SQL SERVER上建一个表.

CREATE TABLE tb(name ntext,sex nvarchar(255))

然后打开SSIS.并添加一个数据流.在数据流里.添加一个OLEDB.

新建一个exceloledb.在这里就不说了.

只需要将Provider设置为Microsoft Ace Oledb.然后选择Excel文件.

然后设置Extended Properties属性为Excel 12.0;HDR=YES

即可.

设置如下.

 

 

然后切换到.选择namesex两个列.

 

然后确定.以完成OleDB源的设置.

 

但是这时候要注意的是.这时.ACE引擎会给我们把name解释成什么类型呢?.

我们右击这个OLEDB.进入高级编辑器”.然后在输入和输出当中.看看输入列中name的类型.

我们看到.引擎给我们把name列的类型解释为DT_WSTR.并且Length255.

但是我们显然有记录的长度远远超过255.

如果这时候.运行一下.

那么就会出错.

然后在进程选项卡当中.我们可以看到一个跟开始一样的错误.

文本被截断,或者一个或多个字符在目标代码页中没有匹配项。

 

如果此时,我们将注册表中

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 项的值设置为0

 

SSIS.重新设置一个OLEDB.那么现在再右击OLEDB.高级编辑器中看看列的类型.

可以看到类型已经自动识别为ntext.

 

OK,现在再加上SQL SERVER的目标.即可.

 

 

 

帖子URL : http://topic.csdn.net/u/20090915/11/7c9a964f-af59-4ab6-8655-77b4c4c657ab.html?17126

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值