Mar*_*ATS 18 t-sql oledb excel-2007 isam openrowset
我正在尝试使用带有"Microsoft.ACE.OLEDB.12.0"OLE DB提供程序的T-SQL OpenRowset()命令将Excel 2007(.xlsx)文件中的数据导入SQL Server 2008,并且我得到一个持久的"找不到可安装的ISAM"错误.所有硬件都是32位.
[修订于2012年1月10日,试图更加集中于异常]
以下T-SQL语句产生错误:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES"',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
如果我以"Excel 97-2003"格式(.xls)保存Excel文件并使用较旧的Microsoft.Jet.OLEDB.4.0提供程序导入数据,它可以正常工作.这让我觉得这不是安全或其他环境问题.
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\work\TestData.xls;HDR=YES',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用Microsoft.ACE.OLEDB.12.0提供程序的*.xls文件时,它应该向后兼容*.xls格式,它再次失败并出现相同的错误:
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Data Source=C:\work\TestData.xls;Extended Properties="Excel 8.0;HDR=YES";',
'SELECT * FROM [Sheet1$]'
)
Run Code Online (Sandbox Code Playgroud)
另外,有趣的是,当我使用SSMS"导入数据..."向导时,它工作正常.我将导入数据向导输出保存为SSIS包,并查看SSIS文件以试图弄清楚它是如何工作的,并且它已成功使用Microsoft.ACE.OLEDB.12.0提供程序.这是SSIS包中的连接字符串:
<DTS:Property DTS:Name="ConnectionString">
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\work\TestData.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";
</DTS:Property>
Run Code Online (Sandbox Code Playgroud)
我还完成了相关的SQL Server配置以允许OPENROWSET分布式查询:
sp_configure 'show advanced options', 1
reconfigure
GO
sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
GO
Run Code Online (Sandbox Code Playgroud)
如果我还设置了以下*sp_MSset_oledb_prop*值(我在某个帖子中找到)...
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
Run Code Online (Sandbox Code Playgroud)
...然后错误更改为"未指定的错误":
OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".
Run Code Online (Sandbox Code Playgroud)
但是,我不确定这是上游还是下游错误.(它现在找到"可安装的ISAM"但随后失败了吗?)
我在两台不同的机器/操作系统(Windows Server 2003,Windows XP SP3)上尝试了多个Excel文件.两台机器都是32位的.
我还尝试重新安装Office 2007和Office 2010版本的AccessDatabaseEngine.exe(http://www.microsoft.com/download/en/details.aspx?id=23734和http://www.microsoft .com/download/en/details.aspx?id = 13255,分别),无济于事.
总结一下:
有什么想法吗?
小智 -1
我认为答案隐藏在您发布的 SSIS 包信息中。新的文件格式 xlsx 以 XML 格式而不是旧格式存储数据。再看一下。它显示...扩展属性=“Excel 12.0 XML;HDR=YES”
不要错过标准内容之后的 XML。(就其价值而言,我还了解到您需要“Excel 12.0 Macro”才能连接 xslm 文件。)
试一试。很奇怪,但希望它能起作用。
| 归档时间: |
|
| 查看次数: |
48906 次 |
| 最近记录: |