SQL Server:无法为链接服务器"(null)"初始化OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"的数据源对象

S L*_*S L 11 sql-server excel openrowset

我正在尝试运行以下查询:

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=C:\Somefile.xlsx',
'SELECT * FROM [Sheet$]')
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

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)

我尝试了以下方法:

sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

和:

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)

当我转到"服务器对象" - >"链接服务器" - >"提供商"时,会列出Microsoft.ACE.OLEDB.12.0.

安装了Acess Database Engine x64,所有Office产品都是64位,而我的SQL Server也是64位.

如果重要,所有用户都可以访问Users文件夹中的Temp文件夹.

(这些都是我在这个问题的类似答案中找到的建议)

编辑:使用SQL Server 2014.

Vin*_*ent 17

确保关闭Excel电子表格并以管理员身份运行SSMS.

  • 以管理员身份运行 SSMS 确实有效 - 但我觉得这应该没有必要。是否有理由需要以管理员身份运行? (2认同)

kjb*_*tel 6

我从这个博客中发现了让它为我工作所需的两个缺失的步骤。

1)检查Temp文件夹的权限

这是必需的,因为提供程序在检索数据时使用临时文件夹。根据您使用的是本地系统帐户还是网络域帐户,该文件夹可以是以下之一。

对于网络帐户,文件夹为
:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp

对于本地系统帐户,它的
:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp

右键单击此文件夹并授予它对执行代码的帐户的读写访问权限。

2)检查分配的 MemToLeave 内存区域

  • 打开 SQL Server 配置管理器 -> 服务 -> SQLServer 服务。
  • 右键单击并选择属性。
  • 转到高级选项卡并附加 -g512; 启动参数属性,它将解决问题。

AllowInProcess如果您按照这篇 MSDN 文章中的说明进行操作,您也可以在不需要的情况下运行它。核心指令是:

为了能够执行链接服务器查询,还要在链接服务器属性上将 RPC OUT 设置为 true。

使用进程外提供程序设置链接服务器所需的权限:

验证 DCOMCNFG 中的以下设置:开始 --> 运行 --> Dcomcnfg

  1. 组件服务 --> 我的电脑 ---> 属性
    确认在“默认属性”选项卡中设置了以下选项:

    • 选中“在此计算机上启用分布式 COM”。
    • 默认身份验证 = 连接。
    • 默认模拟级别 = 识别或模拟。
  2. 组件服务 --> 我的电脑 --> DCOM 配置 --> MSDAINITIALIZE

    • 右键单击 MSDAINITIALIZE --> 属性 --> 安全
    • 在“启动和激活权限”、“访问权限”和“配置权限”下添加 SQL Server 服务帐户(如果使用 SQL 登录连接到 SQL Server)或 windows 用户帐户。
    • 授予这些帐户的全部权限。
  3. 重启服务器