阻止SSIS import excel时的默认行为

为何SSIS老是错误地获取Excel数据类型,以及如何解决它!

Concentra发布 2013年5月15日app

分享此页面

 

发现Concentra的分析解决方案

 


Concentra的分析和商业智能团队将信息转化为洞察力,从而为您提供数据优点。学到更多。编辑器

 

做为具备Microsoft工具堆栈的BI开发人员,我常常处理多个数据源,其中一个是Excel,这是Data Warehousing项目中很是常见的数据源。正如大家中的一些人可能知道的那样,在SSIS(SQL Server Integration Services)中使用Excel会遇到问题,若是你知道这些,这篇文章将更详细地帮助人们并为你提供一些可能的解决方案来帮助你一段时间ide

此博客还将帮助回答有关如下问题:工具

  • 使用Excel做为源时,为何SSIS没有正确获取个人数据类型
  • 当excel文件包含数据时,为何个人某些列为NULL
  • 如何解决个人Excel源代码问题
  • Excel SSIS驱动程序问题

咱们在使用SSIS和Excel时遇到的问题的主要驱动因素源于SSIS自动肯定链接到Excel源时的数据类型。SSIS Excel驱动程序根据读取前8行的值肯定每列的数据类型。spa

  • 若是前8个记录包含相同数量的数字和字符类型 - 则优先级为数字图1和2中的 column2 
  • 若是大多数前8个记录都是数字,那么它将数据类型指定为数字,全部字符值都读为NULL 图1和2中的 column3 ) 
  • 若是大多数前8个记录都是字符类型,那么它将数据类型指定为字符串,并将全部数值读取为NULL 图1和2中的 column4 
Concentra  -  Excel输入数据

 

图1:Excel输入数据excel

 

Concentra  -  SSIS Excel源组件元数据

 

图2:SSIS Excel源组件元数据code

 

Concentra  -  SSIS Excel源组件中的输出预览窗口

 

图3:SSIS Excel源组件中的“输出预览”窗口orm

 

从上面的屏幕截图中能够看出,咱们在目标表中收到NULL,咱们有数据要加载,这不是所需的输出。那么,咱们该如何解决这个问题呢?blog

经过将IMEX = 1(导入导出模式)属性添加到链接字符串,excel正确读取数据(参见图4)。ci

设置链接字符串属性以下:

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:Folder1Book1.xls; Extended Properties =“EXCEL 8.0; HDR = YES; IMEX = 1”;

Concentra  -  SSIS Excel链接管理器链接字符串属性

 

图4:SSIS Excel链接管理器链接字符串属性

 

添加此属性后,excel驱动程序将具备混合类型的列读取为Unicode String数据类型(请参见图5)并正确读取数据(请参见图6)。

Concentra  -  SSIS Excel源组件元数据,IMEX = 1

 

图5:SSIS Excel源组件MetadatA

 

  Concentra  -  SSIS Excel源组件中的输出预览窗口,IMEX = 1

 

图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)

Concentra  - 注册表编辑器 -  Excel驱动程序TypeGuessRows属性图7:注册表编辑器 - Excel驱动程序TypeGuessRows属性
相关文章
相关标签/搜索