You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:09