SQL 查询 EXCEL 表常见错误解决


【错误信息】

消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OleDb.12.0" 报错。提供程序未给出有关错误的任何信息。

 

环境介绍

Win7 64位、SQL SERVER 2012 64bit、OFFICE 2013  64位

 执行的代码为

 

select *  
from  OPENROWSET('Microsoft.Ace.OLEDB.12.0',    'Excel 12.0;DATABASE=E:\test.xlsx' , 'Select * from [Sheet1$]')


以下为执行过程中的错误提示和解决方法,都是一步步来的. 

错误提示 一

消息 7403,级别 16,状态 1,第 1 行
尚未注册 OLE DB 访问接口 "Microsoft.Ace.OLEDB.12.0"。
解决方法 一
 
在SQL  Management Studio中 服务器对象-->链接服务器-->访问接口,打开后只看到 Microsoft.Ace.OLEDB.15.0.
(如果EXCEL为2007 或者 2010 版本的 如果没有看到 Microsoft.Ace.OLEDB.12.0. ,要下载AccessDatabaseEngine,进行安装.下载时注意2007 2010版本和32 64位)
 所以上面语句改为以下语句后再执行.

  

select * 
 from OPENROWSET('Microsoft.Ace.OLEDB.15.0',   'Excel 12.0;DATABASE=E:\test.xlsx', 'Select * from [Sheet1$]')

  

错误提示 二
 
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.15.0" 报错。访问被拒绝。
消息 7350,级别 16,状态 2,第 1 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口"Microsoft.Ace.OLEDB.15.0"获取列信息。
但是能看到数据表的 标题行

解决方法 二

控制面板/管理工具/服务/SQL Server (MSSQLSERVER)  --> 右键 属性 --> 登录 --> 设置: 登录身份=本地系统账户  --> 重启 SQL Server (MSSQLSERVER) 服务

 

错误提示 三

消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.15.0" 报错。提供程序未给出有关错误的任何信息。
消息 7330,级别 16,状态 2,第 1 行
无法从链接服务器 "(null)" 的 OLE DB 访问接口"Microsoft.Ace.OLEDB.15.0"提取行。

解决方法 三

修改ACE接入参数,以下操作后要重启  SQL Server (MSSQLSERVER) 服务.

SQL Management Studio:SQL服务器-->服务器对象-->链接服务器-->Microsoft.ACE.OLEDB.12.0 属性-->常规-->选中:1、动态参数;2、允许进程内

 

或者

  

USE [master]    

GO    

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1    

GO    

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1    

GO    

 

 

一般情况下问题应该是已经解决的了.

错误提示 四

消息 7399,级别 16,状态 1,第 1 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OLEDB.15.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器“(null)”的 OLE DB 访问接口“Microsoft.Ace.OLEDB.15.0”的数据源对象。

解决方法 四

1,这时可能EXCEL 处于不可编辑状态,看看是不是打开了,如果打开了要关闭上才行.

2,如果没有文件打开,那么可以打开EXCEL表,看看有没有说“文件正在被占用”之类,如果有的话可以过一会再试试.

 


开启外围配置


--开启高级设置
  
exec  sp_configure 'show advanced options' ,1reconfigure
  
--开启外围设置
exec  sp_configure 'Ad Hoc Distributed Queries' ,1reconfigure 



文章参照了 http://blog.youkuaiyun.com/wonsoft/article/details/7730976

 

参考资源链接:[优化CSV大容量导入SQL Server:解决终止符问题与速度提升](https://wenku.youkuaiyun.com/doc/6412b678be7fbd1778d46d80?utm_source=wenku_answer2doc_content) 在执大容量数据导入至SQL Server时,正确的终止符处理和datetime列格式是关键。根据《优化CSV大容量导入SQL Server:解决终止符问题与速度提升》中提到的经验,以下是一些重要的步骤和注意事项: 首先,确保CSV文件的终止符与BulkInsert期望的格式相匹配。在许多CSV文件中,换符是LF(Line Feed,即'0x0a'),而BulkInsert默认期望的格式是CRLF(Carriage Return Line Feed)。这就解释了为什么会出现错误4866,该错误提示终止符与BulkInsert不兼容。 要解决这个问题,可以使用ROWTERMINATOR参数来明确指定终止符。例如,在BulkInsert语句中,将ROWTERMINATOR设置为'0x0a',如下所示: ```sql BULK INSERT YourTableName FROM 'path_to_your_csv_file.csv' WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = '0x0a'); ``` 这样可以确保即使CSV文件的终止符为LF而非CRLF,BulkInsert也能正确解析。 其次,对于datetime列的格式,确保CSV文件中的日期时间数据符合SQL Server的数据类型要求。在导入过程中,可能会遇到格式不匹配的问题,导致错误7399或7330。如果遇到这类错误,应检查datetime列的数据格式,并在导入前进适当的转换或格式化。 例如,如果CSV中的日期时间格式为“年-月-日 时:分:秒”,应确保在BulkInsert语句中或在数据转换过程中,将这些数据转换为SQL Server能接受的datetime格式,通常是YYYYMMDDHH:MM:SS。 通过这些调整,可以有效解决导入过程中的终止符和日期时间格式问题,从而成功执大容量数据的导入任务。 在学习了如何处理终止符和datetime列格式之后,如果需要更深入地了解CSV导入、SQL Server的BulkInsert优化以及如何处理常见的导入问题,建议详细阅读《优化CSV大容量导入SQL Server:解决终止符问题与速度提升》。这份资料不仅提供了实用的技巧和方案,还涵盖了对速度提升和错误处理的深入讨论,能够帮助你全面提升导入效率和数据处理能力。 参考资源链接:[优化CSV大容量导入SQL Server:解决终止符问题与速度提升](https://wenku.youkuaiyun.com/doc/6412b678be7fbd1778d46d80?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值