【发布时间】:2013-03-15 14:19:44
【问题描述】:
我尝试在 SSMS 中访问 Excel 文件。在互联网上搜索后,我无法让它工作。
这是我所做的:
我的环境:
Windows 7(64bit) SP 1,
Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64)
Office 2010 Pro Plus with Access installed(32 bit)
-
尝试更改 OLE 的配置,例如:
exec sp_configure 'Advanced', 1 RECONFIGURE exec sp_configure 'Ad Hoc Distributed Queries', 1 RECONFIGURE EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 -
运行查询:
SELECT * FROM OPENROWSET('MICROSOFT.ACE.OLEDB.12.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')或
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\Temp\;','SELECT * FROM [test.csv]')
对于这两种情况,我都收到如下错误消息:
Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'MICROSOFT.JET.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
或
Msg 7308, Level 16, State 1, Line 1
OLE DB provider 'MICROSOFT.ACE.OLEDB.12.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
然后我在SQL server上查看了链接服务器,运行系统sp默认有10个provider:
EXEC master.dbo.sp_MSset_oledb_prop
SQLOLEDB
MSOLAP
SQLNCLI11
ADsDSOObject
SQLNCLI
SQLNCLI10
Search.CollatorDSO
MSDASQL
MSDAOSP
MSIDXS
如何解决这个问题?
我如何知道 MICROSOFT.ACE.OLEDB.12.0 或 MICROSOFT.JET.OLEDB.4.0 是否适用于 SQL Server?
【问题讨论】:
-
OLE DB 4.0 与 64 位不兼容。您使用的是哪个版本的 AccessDatabaseEngine?
-
我使用的是 Office 2010 32 位。然后我更改为 Office 2010 64 位,它似乎适用于 excel xls 文件,例如: select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 8.0;Database=C:\Temp\Test.xls;', '选择 * 从 [Location1$]')。但它不适用于 excel xlsx 文件,例如: select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 9.0;Database=C:\Temp\Test.xlsx;', 'SELECT * FROM [Location1$] ')。如何使其与 xsls 文件一起使用?在这种情况下,OpenRowSet 的正确语法是什么?
标签: sql sql-server-2008 tsql oledb linked-server