如何找到可用于SQL Server的OLE提供程序?

如何找到可用于SQL Server的OLE提供程序?,sql,sql-server-2008,tsql,oledb,linked-server,Sql,Sql Server 2008,Tsql,Oledb,Linked Server,我尝试访问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_co

我尝试访问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]')
    

  • 对于这两种情况,我都会收到如下错误消息:

    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.
    

    然后我检查了SQL server上的链接服务器,运行system sp时默认有10个提供程序:

    EXEC master.dbo.sp_MSset_oledb_prop 
    
    SQLOLEDB
    MSOLAP
    SQLNCLI11
    ADsDSOObject
    SQLNCLI
    SQLNCLI10
    Search.CollatorDSO
    MSDASQL
    MSDAOSP
    MSIDXS
    
    如何解决这个问题?
    如何知道SQL Server是否有
    MICROSOFT.ACE.OLEDB.12.0
    MICROSOFT.JET.OLEDB.4.0

    SELECT *
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Temp\Test.xlsx;', 'SELECT * FROM [Location1$]')
    
    如果要连接到Microsoft Office Excel数据,请根据Excel文件类型添加OLEDB连接字符串的相应扩展属性:

    File Type (extension)                               Extended Properties
    ---------------------------------------------------------------------------------
    Excel 97-2003 Workbook (.xls)                       "Excel 8.0"
    Excel 2007-2010 Workbook (.xlsx)                    "Excel 12.0 Xml"
    Excel 2007-2010 Macro-enabled workbook (.xlsm)      "Excel 12.0 Macro"
    Excel 2007-2010 Non-XML binary workbook (.xlsb)     "Excel 12.0"
    

    OLE DB 4.0与64位不兼容。您使用的是什么版本的AccessDatabaseEngine?我使用的是Office 2010 32位。然后我改为Office 2010 64位,它似乎可以使用excel xls文件,比如:从OPENROWSET中选择*('Microsoft.ACE.OLEDB.12.0','excel 8.0;Database=C:\Temp\Test.xls;','select*from[Location1$]'。但它不适用于excel xlsx文件,例如:从OPENROWSET中选择*('Microsoft.ACE.OLEDB.12.0','excel 9.0;数据库=C:\Temp\Test.xlsx;','select*from[Location1$]'。如何使它与xsls文件一起工作?OpenRowSet在这个案例中的正确语法是什么?在我的案例中不起作用,同样的问题。你有其他解决方案吗?@Luv请你澄清一下,好吗?错误,你的提供商,等等,通过谷歌搜索2个小时左右。错误消息7308,级别16,状态1,第39行OLE DB提供程序“Microsoft.ACE.OLEDB.12.0”不能用于分布式查询,因为该提供程序已配置为在单线程单元模式下运行。@Luv SQLServer(32或64位)和Microsoft Access数据库引擎2010(32或64位)的版本是什么?SQL server 64位和Microsoft Access数据库引擎2010 64位
    SELECT *
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Temp\Test.xlsx;', 'SELECT * FROM [Location1$]')
    
    File Type (extension)                               Extended Properties
    ---------------------------------------------------------------------------------
    Excel 97-2003 Workbook (.xls)                       "Excel 8.0"
    Excel 2007-2010 Workbook (.xlsx)                    "Excel 12.0 Xml"
    Excel 2007-2010 Macro-enabled workbook (.xlsm)      "Excel 12.0 Macro"
    Excel 2007-2010 Non-XML binary workbook (.xlsb)     "Excel 12.0"