OPENROWSET函数执行无输出,无法通过SSMS读取Excel文件求助
解决OPENROWSET读取Excel无输出的问题
我来帮你排查这个OPENROWSET读取Excel卡住无输出的问题,你已经做了不少基础配置,咱们再从几个关键点入手:
1. 检查文件路径与权限
- 路径格式修正:你的文件路径包含空格,虽然包裹在连接字符串的单引号里,但OLEDB驱动对带空格的路径处理可能存在兼容问题。建议把路径用双引号嵌套起来,修改后的连接字符串部分如下:
'EXCEL 12.0; DATABASE="C:\Users\XXXX\Documents\Power BI Projects\XXXXX\XXXX\ Input Files\Processed\Daywise Rating.xlsx";HDR=YES' - 本地系统账户权限:虽然已经将SQL Server服务账户切换为本地系统,但要确认该账户拥有目标文件及文件夹的读写权限。右键文件夹→属性→安全→添加
LOCAL SYSTEM账户,赋予它完全控制或读写权限,避免因权限不足导致驱动无法读取文件。
2. 确认ACE驱动版本匹配
这是最容易踩坑的点:
- 若你的SQL Server是64位,必须安装64位的Microsoft Access Database Engine驱动;若为32位SQL Server,则安装32位驱动。跨位数安装会导致驱动无法被SQL Server调用,直接出现无响应或无输出的情况。
- 可以通过命令提示符验证驱动是否安装:运行
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine",如果能查询到对应注册表项,说明ACE 12.0驱动已正确安装。
3. 调整查询语句细节
- 工作表名称验证:确认
[Customer$]与Excel中实际的工作表名完全一致,包括空格、特殊字符和$后缀(不能遗漏)。比如工作表名为Customer Rating,则需写成[Customer Rating$]。 - 简化测试查询:先尝试读取少量数据,比如
SELECT TOP 1 * FROM [Customer$],排查是否因数据量过大导致读取超时。如果简化后仍无输出,说明不是数据量的问题。 - 连接字符串优化:将
EXCEL 12.0改为Excel 12.0 Xml,针对xlsx格式的兼容性更好,修改后的连接字符串:'Excel 12.0 Xml; DATABASE="C:\Users\XXXX\Documents\Power BI Projects\XXXXX\XXXX\ Input Files\Processed\Daywise Rating.xlsx";HDR=YES'
4. 检查SQL Server关键配置
- 启用Ad Hoc Distributed Queries:运行以下语句确认该配置已开启(默认可能关闭):
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE; - 确认OLEDB提供程序配置:再次检查SSMS中
服务器对象→链接服务器→提供程序→Microsoft.ACE.OLEDB.12.0的Dynamic Parameters和Allow Inprocess是否均设为True,修改后建议重启SQL Server服务确保配置生效。
5. 排查进程与日志
- 打开任务管理器,观察
sqlservr.exe的CPU和内存占用:如果占用较高,说明正在读取数据,可等待一段时间;如果无动静,说明驱动未正常工作。 - 查看SQL Server错误日志:在SSMS中进入
管理→SQL Server日志,查找与OLEDB、ACE驱动相关的错误信息(如权限不足、驱动找不到等),这些日志能直接定位问题根源。
按照上面的步骤逐一排查,尤其是驱动版本匹配和权限设置这两个核心点,应该能解决OPENROWSET执行无输出的问题。
内容的提问来源于stack exchange,提问作者Vignesh Murali




