SSSI导EXCEL数据常见问题

在使用SQL SERVER将EXCEL导入到数据库中的时候.经常会发生一些问题.会让我们有些感觉到莫名其妙. 今天在论坛上.一个朋友在使用SSIS将EXCEL导入到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源. 新建一个excel的oledb源.在这里就不说了. 只需要将Provider设置为Microsoft Ace Oledb.然后选择Excel文件. 然后设置Extended Properties属性为Excel 12.0;HDR=YES 即可. 设置如下. 然后切换到”列”中.选择name和sex两个列. 然后确定.以完成OleDB源的设置. 但是这时候要注意的是.这时.ACE引擎会给我们把name解释成什么类型呢?. 我们右击这个OLEDB源.进入”高级编辑器”.然后在”输入和输出”当中.看看输入列中name的类型. 我们看到.引擎给我们把name列的类型解释为DT_WSTR.并且Length是255. 但是我们显然有记录的长度远远超过255. 如果这时候.运行一下. 那么就会出错. 然后在进程选项卡当中.我们可以看到一个跟开始一样的错误. “文本被截断,或者一个或多个字符在目标代码页中没有匹配项。” 如果此时,我们将注册表中 Jet引擎. HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesExcel 如果是:ACE引擎. HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice12.0Access Connectivity EngineEnginesExcel 下的TypeGuessRows 项的值设置为0 再SSIS中.重新设置一个OLEDB源.那么现在再右击OLEDB源.在”高级编辑器”中看看列的类型. 可以看到类型已经自动识别为ntext了. OK,现在再加上SQL SERVER的目标.即可. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liangCK/archive/2009/09/15/4555540.aspx [@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7192349/viewspace-1033298/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7192349/viewspace-1033298/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值