SSIS包用Excel目标时遇'Microsoft.ACE.OLEDB.12.0未注册'错误,求其他方案
遇到过不少这类SSIS结合ACE驱动的问题,除了重构包,还有几个实用的排查方向可以试试:
检查SQL Server Agent作业的运行架构:
SQL Server Agent默认以64位模式运行SSIS包,但ACE驱动分32/64位版本,很多时候服务器装的是32位ACE驱动(尤其是已经安装了32位Office的情况)。你可以编辑作业步骤,在「执行选项」里勾选**「使用32位运行时」**,再重新运行作业试试。这是最常见的触发该报错的原因之一。验证SQL Server Agent服务账号的权限:
你本地运行包用的是自己的用户账号,而Agent是用指定的服务账号(比如Local System、Network Service或域账号)运行的。需要确认:- 该账号对Excel文件的存放目录(包括网络共享路径)有读写权限,NTFS权限和共享权限都要检查;
- 账号有访问ACE驱动安装目录和对应注册表项的权限,权限不足会导致驱动加载失败,哪怕注册表能查到该驱动。
修复或重新安装ACE驱动:
虽然注册表能找到驱动项,但可能存在安装不完整或文件损坏的情况。你可以下载对应版本的「Microsoft Access Database Engine 2010 Redistributable」(ACE 12.0对应的安装包),选择修复安装。注意:如果服务器已安装Office,必须保证ACE驱动和Office的位数一致(32位Office配32位ACE,64位同理),否则会出现兼容性问题。核对SSIS包的连接字符串:
对比本地能正常运行的包和服务器上的包的连接字符串,确认是否存在拼写错误(比如驱动版本号写错),或者Extended Properties设置不符合Excel版本(比如Excel 2007及以上应该用Extended Properties="Excel 12.0 Xml;HDR=YES;")。用Agent服务账号手动测试包运行:
在服务器上,使用SQL Server Agent的服务账号登录(本地账号可以用runas /user:YourAgentAccount cmd命令打开命令行),然后用dtexec /f "C:\Path\To\YourPackage.dtsx"命令手动执行包。如果手动运行也报错,说明问题出在账号权限或驱动本身;如果能成功,那可能是Agent作业的配置有问题。考虑替代方案绕开ACE驱动:
如果ACE驱动的兼容性问题始终无法解决,可以换个思路:- 先把数据导出为CSV文件,再用PowerShell或Python脚本将CSV转换成Excel格式;
- 使用第三方SSIS组件(无需依赖ACE驱动的Excel源/目标组件)来处理Excel文件。
内容的提问来源于stack exchange,提问作者user144037

