【问题标题】:Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象
【发布时间】:2013-06-03 22:01:03
【问题描述】:

当我在 SQL Server 2012 中运行以下命令时

 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 * INTO dbo.Normalization FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=c:\_sandbox\Consolidations.xlsx','SELECT * FROM [Codes and Values$]')

我收到此错误

无法初始化 OLE DB 提供者的数据源对象 链接服务器“(null)”的“Microsoft.ACE.OLEDB.12.0”。

知道为什么吗?

【问题讨论】:

    标签: tsql sql-server-2012


    【解决方案1】:

    是否安装了提供程序? Microsoft.ACE.OLEDB.12.0 提供程序默认不存在,因此如果您尚未安装它,它将无法初始化。

    在 SQL management studio 中的 Server Objects -> Linked Servers -> Providers 中查看是否列出。

    如果没有,您需要安装 Microsoft Access 数据库引擎(x86 或 x64,具体取决于您的 SQL 服务器安装),它将为您安装提供程序。

    在此处下载软件:

    Microsoft Access Database Engine 2010 Redistributable

    【讨论】:

    • 如果我有一个 32 位的办公室和 64 位的 sql server 呢?
    • 您需要下载正确的 SQL Server 版本才能使用,正如我之前在开发机器上发现的那样,如果它们不匹配,则需要卸载其他办公组件
    • @steoleary,我遇到了同样的问题,但我在你说的路径上列出了提供者。这是我的查询SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'X:\path\filename.mdb',' password')我哪里出错了?在此之前,我执行了这个Exec sp_configure 'show advanced options', 1; RECONFIGURE; GO Exec sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; 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
    • 我不记得确切的语法,但我记得当从访问数据库中选择数据时,您必须在发送到 openrowset 的参数中提供查询,一些像这样 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',';Data Source=X:\path\filename.mdb;','SELECT * from table') 否则 openrowset 将无法返回任何数据。
    【解决方案2】:

    我在访问数据库时遇到了同样的错误。我使用的是这种语法:

    SELECT * FROM OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0','DataSource=D:\test.mdb')...[MyTableName]
    

    然后我知道'DataSource'应该是'Data Source'。

    SELECT * FROM OPENDATASOURCE ('Microsoft.ACE.OLEDB.12.0','Data Source=D:\test.mdb')...[MyTableName]
    

    它适用于我的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2020-04-15
      相关资源
      最近更新 更多