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

Sql server 为什么SSIS会忽略从Excel源导入的最后一列?,sql-server,database,excel,ssis,Sql Server,Database,Excel,Ssis,我是一名商业智能开发实习生,如果我对SQL或Microsoft BI Stack的了解不如其他人,请原谅我 我正在尝试将数据从Excel文件(.xls)导入SQL Server数据库表,由于某种原因,连接管理器完全忽略了我数据的最后一列 更奇怪的是,当Excel文件在Excel中打开时,如果我尝试在SSIS中设置连接管理器,SSIS会读取数据。 (我想我一开始是无意中这样做的,并对结果感到惊讶。) 以下是未在Excel中打开文件的数据预览: 以及在SSIS中设置连接管理器之前打开文件的数据预览

我是一名商业智能开发实习生,如果我对SQL或Microsoft BI Stack的了解不如其他人,请原谅我

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

更奇怪的是,当Excel文件在Excel中打开时,如果我尝试在SSIS中设置连接管理器,SSIS会读取数据。 (我想我一开始是无意中这样做的,并对结果感到惊讶。)

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

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

这两个选项都描述了文件中数据的结尾,但由于某些原因,正如您所看到的,“区域”列在第一次数据预览中被省略

到目前为止,我已经尝试了以下步骤:

  • 使用脚本任务转换为.csv文件
  • 使用ADO.Net源代码并以这种方式读取excel数据
  • 使用SQL命令查看数据而不是从表或工作表中选择
  • 更改OpenRowset属性以指定列
  • 有关源文件的详细信息:

  • 前3行数据为空(图像除外)
  • 第4行包含标题数据
  • “Zone”列的格式为general,其他不包含日期的列也一样
  • 如果有人有任何想法或建议,我将非常感谢您的反馈


    谢谢

    有时SSIS在检测给定列的数据类型时遇到问题。这可能导致意外的空值。将IMEX=1添加到ConnectionString可以清除此故障

    范例 Provider=Microsoft.Jet.OLEDB.4.0;数据源=您的_工作簿.xls;扩展属性=“EXCEL 8.0;HDR=NO;”

    变成

    Provider=Microsoft.Jet.OLEDB.4.0;数据源=您的_工作簿.xls;扩展属性=“EXCEL 8.0;HDR=NO;IMEX=1

    有关更多详细信息,请参阅本文(不是我自己的作品):


    您是在阅读整个excel工作表,还是在使用选定的范围,例如从[MyWorksheet$B5:J100]中选择*?我已经尝试了这两种方法,但都无效。与其说是数据类型,不如说是SSI根本没有检测到列。正如您在一个示例中看到的,账单到账户是最后一列,但在另一个示例中,在实际文件中,区域是最后一列。很抱歉,我看不到这些示例,我的防火墙正在阻止它们。我试图复制,但无法创建相同的错误。