查询语句SqlServer与Excel数据导入导出

时间:2021-08-07 04:47:10

一、Excel文件在sqlserver数据库的本地 

1、启用Ad Hoc Distributed Queries的方法
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
2、从数据库将数据导入到Excel
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=D:\Excel文件 名.xls',Sheet1$)select * from 数据库表名
3、从Excel导入到数据库中
insert into 数据库表名 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=D:\Excel文件名.xls',Sheet1$)

/*
说明:
Microsoft.Jet.OLEDB.4.0:数据库提供程序,连接驱动
Data Source:excel的路径
User ID:excel用户名,默认为Admin
Password:密码。默认为空
Extended properties:excel版本
[Sheet1$]:Sheet1表单名称
*/

/*

--将查询结果插入其他表中(注意字段个数必须一致,并且一一对应)
insert into 表名(字段1,字段2,字段3,字段4) 
select 人员,时间,内容,结果 from OpenDataSource('Microsoft.Jet.OLEDB.4.0',

'Data Source=d:\log.xls;User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$] 

*/

4、关闭Ad Hoc Distributed Queries的方法
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

如果是32位的操作系统,32位的sqlServer如上操作就不存在什么问题了,但如果是64位的操作系统和sqlServer以上的做法就行不通了,而且会报错
错误信息如下:
消息 7302,级别 16,状态 1,第 1 行
无法创建链接服务器 '(null)' 的 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 的实例。
原因:
在64SQL Engine中已经不提供jet.oledb.4.0的驱动了
解决方法:
下载一个ACE.Oledb.12.0 fo  r X64位的驱动,并把连接字符串Microsoft.jet.Oledb.4.0 更改为 Microsoft.ACE.OLEDB.12.0
下载地址:
http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=c06b8369-60dd-4b64-a44b-84b371ede16d
完成后改写语句:select * from OpenRowSet
('Microsoft.ACE.OLEDB.12.0',
'Excel 8.0;HDR=Yes;Database=c:/test.xls',
[Sheet1$]
)
这样就搞定了。