阻止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)
图7:注册表编辑器 - Excel驱动程序TypeGuessRows属性阻止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 底层是依赖了一个字符数组才能存储字符 ...
随机推荐
- LeetCode OJ-- Trapping Rain Water*
https://oj.leetcode.com/problems/trapping-rain-water/ 模拟题,计算出在凹凸处存水量. 对于一个位置 i ,分别计算出它左边的最大值 left (从 ...
- HDU 6188最小费用流
题目链接:http://hdu.hustoj.com/showproblem.php?pid=6118 掉坑里了,图很好建,Wa了一发,看了Disscuss里面有人提供了一组样例,画图发现:最小流模板 ...
- PAT 甲级 1045 Favorite Color Stripe(DP)
题目链接 Favorite Color Stripe 题意:给定$A$序列和$B$序列,你需要在$B$序列中找出任意一个最长的子序列,使得这个子序列也是$A$的子序列 (这个子序列的相邻元素可以重复) ...
- HDU - 3664 Permutation Counting
Discription Given a permutation a1, a2, … aN of {1, 2, …, N}, we define its E-value as the amount of ...
- Android view 数据缓存
Android中经常需要用到view数据的缓存,比如我们希望EditText 在被切到别的界面的时候,输入的数据要仍保持不变. 参考代码: /* 缓存textview */ public class ...
- bash帮助文档简单学习;bash手册翻译
关于bash的四种工作方式的不同,可以参考:http://feihu.me/blog/2014/env-problem-when-ssh-executing-command-on-remote/,但是 ...
- Apache和IIS共享80端口的四个设置方法
方法一:IIS5,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2c:\Inetpub\Adminscriptscscript adsutil.vbs set w3s ...
- 翻翻git之---有用的欢迎页开源库 AppIntro
转载请注明出处:王亟亟的大牛之路 今天没有P1.直接进入正题 今天上的是一个帅帅的app滑动介绍页 . 为什么说帅? 作者对自己的内容是这么定义的 Make a cool intro for your ...
- Jenkins和Maven构建持续集成
真是运维的福利,不用在敲Linux命令了 须要的工具:Linux或window.Jenkins.tomcat7.Jdk.maven.项目部署的war包 1.首先从Jenkins官网下载最新的Jenki ...
- (一)MVVMLight安装
http://www.cnblogs.com/manupstairs/p/4890300.html 1.首先新建一个wpf项目 2. 安装完成即可在我们的项目中看到如下引用: 如果点击安装的时候出现: ...