阻止SSIS import excel时的默认行为
为什么SSIS总是错误地获取Excel数据类型,以及如何解决它!
由Concentra发布 2013年5月15日
分享此页面
分享

作为具有Microsoft工具堆栈的BI开发人员,我经常处理多个数据源,其中一个是Excel,这是Data Warehousing项目中非常常见的数据源。正如你们中的一些人可能知道的那样,在SSIS(SQL Server Integration Services)中使用Excel会遇到问题,如果你知道这些,这篇文章将更详细地帮助人们并为你提供一些可能的解决方案来帮助你一段时间
此博客还将帮助回答有关以下问题:
- 使用Excel作为源时,为什么SSIS没有正确获取我的数据类型
- 当excel文件包含数据时,为什么我的某些列为NULL
- 如何解决我的Excel源代码问题
- Excel SSIS驱动程序问题
我们在使用SSIS和Excel时遇到的问题的主要驱动因素源于SSIS自动确定连接到Excel源时的数据类型。SSIS Excel驱动程序根据读取前8行的值确定每列的数据类型。
- 如果前8个记录包含相同数量的数字和字符类型 - 则优先级为数字(图1和2中的 column2 )
- 如果大多数前8个记录都是数字,那么它将数据类型指定为数字,所有字符值都读为NULL (图1和2中的 column3 )
- 如果大多数前8个记录都是字符类型,那么它将数据类型指定为字符串,并将所有数值读取为NULL (图1和2中的 column4 )

图1:Excel输入数据

图2:SSIS Excel源组件元数据

图3:SSIS Excel源组件中的“输出预览”窗口
从上面的屏幕截图中可以看出,我们在目标表中收到NULL,我们有数据要加载,这不是所需的输出。那么,我们该如何解决这个问题呢?
通过将IMEX = 1(导入导出模式)属性添加到连接字符串,excel正确读取数据(参见图4)。
设置连接字符串属性如下:
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:Folder1Book1.xls; Extended Properties =“EXCEL 8.0; HDR = YES; IMEX = 1”;

图4:SSIS Excel连接管理器连接字符串属性
添加此属性后,excel驱动程序将具有混合类型的列读取为Unicode String数据类型(请参见图5)并正确读取数据(请参见图6)。

图5:SSIS Excel源组件MetadatA

图6:SSIS Excel源组件中的输出预览窗口,IMEX = 1
此外,在excel文件中前8行为NULL的情况下,我们需要编辑注册表设置并将TypeGuessRows属性设置为0,以便让excel驱动程序使用文件中的所有行来正确地确定数据类型(请参阅图7)通过对所有行而不是第1行进行采样。此属性允许的值范围为0-16。因此,我们可以将1-16行或所有行作为允许的样本大小。
需要更改的密钥的位置如下:
HKEY_LOCAL_MACHINE - > SOFTWARE - > Wow6432Node - > Microsoft - > Jet - > 4.0 - > Engines - > Excel - > TypeGuessRows的值为0.(默认情况下包含8)

阻止SSIS import excel时的默认行为的更多相关文章
- POI解析Excel时,如何获取单元格样式以及单元格Style的一些操作
最近,公司运营平台需要上传Excel文件并进行解析导入数据库,在开发完成后出现了一个始料不及的生产bug,下面是具体原因: 1.在用POI解析Excel时,默认如果Excel单元格中没有数据,且单元格 ...
- excel 导入数据库 / SSIS 中 excel data source --64位excel 版本不支持-- solution
当本地安装的excel(2013版) 是64-bit时:出现的以下两种错误 解决: 1. excel 导入数据库 , 如果文件是2007则会出现:“The 'Microsoft.ACE.OLEDB.1 ...
- PHP导出excel时数字变为科学计数的解决方法
在数据导出到excel时数字格式不对,一般分为以下两种情况. 1.excel单元格设置长度不够 解决方法: //在excel.php文件中 $objActSheet = $objPHPExcel-&g ...
- CxGrid导出Excel时清除颜色的设置
CxGrid导出Excel时清除颜色的设置 (2011-04-25 16:33:23) 转载▼ 标签: it 分类: Delphi http://www.radxe.com/?p=170 cxgrid ...
- cmder设置打开时的默认目录
cmder设置打开时的默认目录 打开cmder自动进入工作目录,怎么配置? http://superuser.com/questions/1005285/run-a-bat-file-with-cmd ...
- input 默认值为灰色,输入时清楚默认值
input 默认值为灰色,输入时清楚默认值 <input value="please input your name" onFocus="if(value==def ...
- magento -- 添加新产品时状态默认为激活,库存状态默认为有库存
添加新产品时状态默认为激活 打开文件/app/code/core/Mage/Catalog/Model/Product/Status.php,注释掉“Please Select” /** * Retr ...
- 其他函数:值为NULL时的默认值NVL,DECODE
NVL(列,默认数字值),此函数返回值为数值型,非NULL时返回原始值,NULL时返回默认数字值. DECODE:
- [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
[笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...
随机推荐
- Android 中图可以用到的图片处理类 BitmapUtils
Android在实际开发中很多时候都要对图片进行一定的处理,这里总结的BitmapUtils 类包括一下几个功能: 1.Android图片倒影, 2.Android图片模糊处理, 3.Android图 ...
- spring boot--日志、开发和生产环境切换、自定义配置(环境变量)
Spring Boot日志常用配置: # 日志输出的地址:Spring Boot默认并没有进行文件输出,只在控制台中进行了打印 logging.file=/home/zhou # 日志级别 debug ...
- Codeforces 629 A. Far Relative’s Birthday Cake
A. Far Relative’s Birthday Cake time limit per test 1 second memory limit per test 256 megabytes ...
- Java---详解方法传值问题
过程解析: 1.首先执行int[] arr={3,5,6,1,7,9,0},遇到数组先执行等式右边的,{3,5,6,1,7,9,0}会在堆内存中开辟一块空间,分成7小块,下标分别从0~6,先进行系统初 ...
- iOS开发 解决使用AVAudioRecorder录制后转mp3解决音量小的问题
使用AVAudioRecorder录音后使用avplayer播放声音小,录音完后转成mp3格式的音频声音也小!!! 老板要求最基本的是不用把手机放到耳边听! 在StackOverFlow上查了一下,加 ...
- EasyHook库系列使用教程之四钩子的启动与停止
此文的产生花费了大量时间对EasyHook进行深入了解同一时候參考了大量文档 先来简单比較一下EasyHook与Detour钩取后程序流程 Detours:钩取API函数后.产生两个地址,一个地址相应 ...
- [转] RabbitMQ介绍
转自: http://lynnkong.iteye.com/blog/1699684 1 什么是RabbitMQ? RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初 ...
- C#使用CurrentUICulture切换语言
1. 创建2个窗口 2. 窗口1属性Localizable设置为True,Language选择英语(美国) 然后把窗口1中控件的Text由中文编辑成英文,Form2一样设置. 此时,Form1 ...
- android实例讲解----Tomcat部署Web应用方法总结
参考文档:http://blog.csdn.net/yangxueyong/article/details/6130065 Tomcat部署Web应用方法总结 一.架构介 ...
- crtmp Server 开启rtsp服务功能
Crtmp Server 包含了rtsp 服务功能,如果需要一个简单轻量的rtsp服务,Crtmp Server会是不错的选择. 默认情况下,rtsp功能是关闭的,需要在配置文件中打开.window环 ...