使用Microsoft.ACE.Oledb.12.0创建SQL Server作业时报错7303、7412
SQL Server Agent作业调用OPENROWSET读取Excel失败解决方案
核心原因
手动执行SQL时使用的是当前登录用户的身份权限,而SQL Server Agent作业默认使用NT SERVICE\SQLSERVERAGENT本地服务账号执行,该账号在文件权限、驱动配置权限上存在不足,同时驱动匹配、配置参数错误也会触发该报错。
修复步骤
- 修复SQL语法错误
你提供的SQL语句末尾多了多余的星号,先修正为合法语法:SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0 xml;IMEX=2;HDR=YES;Database=C:\Excel\LanConnection.xlsx;', 'SELECT * FROM [Sheet1$]') - 授予文件目录访问权限
右键点击C:\Excel\目录,选择【属性】-【安全】,添加NT SERVICE\SQLSERVERAGENT账号,授予该账号「列出文件夹内容」、「读取」、「读取和执行」权限,同时确认LanConnection.xlsx文件本身也继承了对应权限。 - 确认ACE驱动位数匹配
检查SQL Server的位数(可通过SELECT @@VERSION查询),安装对应位数的Microsoft Access Database Engine Redistributable,禁止32位和64位驱动混装。 - 调整OLEDB提供程序配置
以管理员身份在SSMS中执行以下SQL,启用分布式查询并配置ACE驱动参数:-- 开启高级配置选项 sp_configure 'show advanced options', 1; RECONFIGURE; -- 启用即席分布式查询 sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; GO -- 配置ACE驱动允许进程内执行、支持动态参数 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; GO - 修改作业执行身份(可选)
如果以上配置仍无法解决问题,可以在SQL Server Agent作业的步骤设置中,将「运行身份」修改为拥有Excel文件访问权限、同时具备SQL Server对应数据库操作权限的域账号或本地用户账号,替代默认的NT SERVICE\SQLSERVERAGENT执行。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

