【问题标题】:Reading MS Excel file from SQL Server 2005从 SQL Server 2005 读取 MS Excel 文件
【发布时间】:2014-06-09 23:36:38
【问题描述】:

我需要从 SQL Server 2005 中的查询中读取 Microsoft Excel 2003 文件 (.xls),然后将其中的一些数据插入到一些表中。读取文件然后使用其数据本身不是问题,但我发现,对于一列,有时我得到一个 NULL 值,而不是 Excel 文件中显示的值。更具体地说:此列始终只有一个字符长,它可以包含 0-9 之间的任何一位数字,或字母“K”。当列包含“K”时,查询会给我一个 NULL 值。我的假设是,由于前几行包含数字作为该列的值,因此查询假定它们将始终是数字,并且当它找到一个字母时,它将其变为 NULL。

我尝试将 Excel 文件中的单元格格式更改为文本,并在值上使用 CAST 和 CONVERT(不是同时)尝试使其成为 varchar,但它什么也没做。

【问题讨论】:

  • 您使用的是OPENROWSET 查询吗?如果是这样,您使用的是什么 OLE DB 驱动程序?
  • @DMason 你是说这个吗? SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=C:\file.xls', 'SELECT * FROM [Sheet1$]');
  • 这看起来像是用于 Excel 的旧 OLE DB 驱动程序。并不是说它不起作用——您仍然可以用它“查询”电子表格。也许尝试更新的东西:SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;Database=C:\File.xls', 'SELECT * FROM [Sheet1$]') 您需要在 SQL Server 上更新 ODBC 驱动程序(确保获得适当的 32 位和 64 位版本)。
  • @DMason 是的,做到了。谢谢! (我不敢相信我没有考虑过尝试...)您应该将其发布为答案,以便我接受。

标签: excel sql-server-2005


【解决方案1】:

这看起来像是用于 Excel 的旧 OLE DB 驱动程序。并不是说它不起作用——您仍然可以用它“查询”电子表格。也许尝试一些新的东西:

SELECT * FROM   
OPENROWSET('Microsoft.ACE.OLEDB.12.0',        
    'Excel 12.0 Xml;HDR=YES;Database=C:\File.xls',        
    'SELECT * FROM [Sheet1$]') 

您需要在 SQL Server 上更新 ODBC 驱动程序(确保获得适当的 32 位和 64 位版本)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多