【发布时间】: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