SQL Server 2019本地执行Openrowset读取Excel卡住问题求助
OpenRowset导入Excel卡住的排查与解决方法
一、检查位数兼容性
- 确认SQL Server与ACE驱动位数一致:64位SQL必须搭配64位**Microsoft Access Database Engine(ACE)**驱动,32位SQL对应32位驱动。如果本地装了32位Office,默认ACE驱动是32位,和64位SQL冲突会导致无响应。
- 卸载冲突组件:若需更换驱动位数,先卸载所有32位Office相关程序,再重新安装对应位数的ACE驱动。
二、文件与权限验证
- 核对文件路径:确保
C:\Users\Public\Documents\Prueba.xlsx真实存在,路径无特殊字符或未转义的空格。 - 配置SQL服务账户权限:SQL Server运行账户(如
NT SERVICE\MSSQLSERVER)需拥有该Excel文件所在文件夹的读取权限。右键文件夹→属性→安全→添加账户并赋予读取权限。 - 关闭占用文件:本地不能打开该Excel文件,文件被占用时ACE驱动会卡住。
三、驱动与配置检查
- 确认Ad Hoc配置生效:执行以下SQL验证配置是否正确开启:
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'ad hoc distributed queries', 1; RECONFIGURE;
- 启用ACE驱动临时访问权限:若驱动被禁止临时访问,执行语句修改:
EXEC sp_MSset_oledb_prop 'Microsoft.ACE.OLEDB.12.0', 'DisallowAdhocAccess', 0;
四、替代测试方案
- 使用链接服务器测试:先创建链接服务器,再查询,排查OpenRowset本身的问题:
EXEC sp_addlinkedserver @server = 'ExcelLink', @provider = 'Microsoft.ACE.OLEDB.12.0', @srvproduct = 'Excel', @datasrc = 'C:\Users\Public\Documents\Prueba.xlsx', @provstr = 'Excel 12.0'; SELECT * FROM OPENQUERY(ExcelLink, 'SELECT * FROM [Hoja1$]');
- 简化查询排查数据问题:只查询单一列,排除数据格式异常导致的卡住:
SELECT 列名1 -- 替换为Excel中实际列名 FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Users\Public\Documents\Prueba.xlsx', 'Select 列名1 from [Hoja1$]')
内容的提问来源于stack exchange,提问作者Sebastián Soto
相关产品推荐
相关产品推荐

