阻止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 底层是依赖了一个字符数组才能存储字符 ...
随机推荐
- 深入了解Entity Framework框架及访问数据的几种方式
一.前言 1.Entity Framework概要 Entity Framework是微软以ADO.NET为基础所发展出来的对象关系映射(O/R Mapping)解决方案.该框架曾经为.NET Fra ...
- 字蛛(font-spider)-单独压缩字体(解决页面少有的特殊字体的字体包引用)
特别想独立的把这个问题写成一篇内容,分享给大家. 反正我是这个字体压缩使用的受益者,不是打广告. 很久以前,设计师总是爱用一些奇奇怪怪的字体放在页面上,而作为前端我们很容易的就能直接使用TA们用到的字 ...
- js-异步请求音频完成后页面显示
var ajax = new XMLHttpRequest(); ajax.open("get", "http://gzmylike.wedei.com/zt/gzyan ...
- expect实现自动分发密钥、网站度量术语
1.优化ssh命令 sed -ir '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\n UseDNS no\nGSSAPIAu ...
- luogu P2066 机器分配
题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...
- Leetcode总结之Backtracking
本文我们就Leetcode中的一个类型的题目backtracking进行一系列的总结和归纳.backtracking这个方法本质是建立在递归的基础上,不断尝试新的路径,这里关键是每次尝试完以后需要退回 ...
- C#深入学习:泛型修饰符in,out、逆变委托类型和协变委托类型
在C#中,存在两个泛型修饰符:in和out,他们分别对应逆变委托和协变委托. 我们知道,在C#中要想将一个泛型对象转换为另一个泛型对象时,必须要将一个泛型对象拆箱,对元素进行显式或隐式转换后重新装箱. ...
- 【Exception】查看异常出现在具体的文件名/类名/方法名/具体行号
今天在处理异常日志保存过程中,想要获取到异常抛出在具体在那个文件,哪个类下的哪个方法中的具体第几行,所以具体实现如下 try{ Integer adminID = Integer.parseInt(a ...
- 树莓派 Zero作为飞控图传
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的链接.图片显示,请访问我的博客原文: http://www.cnblog ...
- 修改Qweb报表
Table of Contents 将报表的类型改为HTML 打印HTML格式报表 使用html editor 修改报表模板 使用Web builder修改报表 恢复报表格式 将报表的 ...