为什么SSIS忽略从Excel源导入的最后一列?

时间:2015-11-30 14:58:31

标签: sql-server database excel ssis

我是商业智能开发实习生,所以请原谅我,如果我不像SQL或Microsoft BI Stack那样精通。

我尝试将数据从Excel文件(.xls)导入SQL Server数据库表,并且由于某种原因,连接管理器完全忽略了我的数据的最后一列。

为了使事情变得更奇怪,如果我在Excel中打开Excel文件时尝试在SSIS中设置连接管理器,SSIS会读取数据。 (我想我最初是无意中做到了这一点,并对结果感到惊讶。)

以下是未在Excel中打开文件的数据预览:

在SSIS中设置连接管理器之前打开文件的数据预览:

这两个都描述了文件中数据的结束,但出于某种原因,你可以看到,'区域'在第一个数据预览中省略了列。

到目前为止我已尝试过的步骤:

  1. 使用脚本任务转换为.csv文件
  2. 使用ADO.Net源并以此方式读取Excel数据
  3. 使用SQL命令查看数据而不是从表或表中选择
  4. 更改OpenRowset属性以指定列
  5. 有关源文件的细节:

    1. 前3行数据为空(图像除外)
    2. 第4行包含标题数据
    3. '区' column的格式为general,而不是每个其他不包含日期的列
    4. 如果有人有任何想法或建议,我将非常感谢您的反馈。

      谢谢!

2 个答案:

答案 0 :(得分:1)

我相信在遇到这篇文章之后我发现了我的问题: http://www.experts-exchange.com/questions/25537245/OPENROWSET-last-column-not-returned-unless-excel-file-manually-saved.html

我希望发布它以防将来遇到任何人。

答案 1 :(得分:0)

有时SSIS无法检测给定列的数据类型。这可能会导致意外的NULL。将IMEX = 1添加到ConnectionString可以清除此错误。

实施例 Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Your_Workbook.xls; Extended Properties =“EXCEL 8.0; HDR = NO;”;

变为

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = Your_Workbook.xls; Extended Properties =“EXCEL 8.0; HDR = NO; IMEX = 1 ”;

有关详细信息,请参阅此博文(不是我自己的工作):

http://blog.concentra.co.uk/2013/05/15/why-ssis-always-gets-excel-data-types-wrong-and-how-to-fix-it/