本帖最后由 kw868 于 2018-4-19 02:42 编辑
成功用NSERT INTO OPENROWSET把SQL查询结果输出到excel指定工作簿的第二行(第一行是固定的列标题)
实现定时自动把SQL查询结果输出到excel指定的工作簿第二行(excel文件的第一行是固定的列标题)解决方案:
成功导出结果的截图:
第一步、必须在64位Win7或winows2012server 操作系统中安装Microsoft Access Engine工具 安装的时候会出现问题。你从微软的主页下载,会发现有两个版本,一个是位32位系统准备的,另一个是为64位系统准备的。因为我们是Win7 64位系统,而且项目用到的dll都是64位的,所以要装Microsoft Access Engine-x64,安装方法:
直接使用"/passive"命令来安装(无需卸载原来32位的相关程序),
在windows 按win+R 运行 输入 "D:\ Microsoft AccessEngine-x64" /passive 回车就自动开始安装 安装完机器会自动重启。D:\ Microsoft AccessEngine-x64是把下载的MicrosoftAccess Engine-x64.exe 直接放在D盘根目录下!
安装完成机器重启后后,查看注册表 (查看注册表命令 在windows 按win+R 运行regedit-回车) 在弹出来的注册表列表中依次:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Common\FilesPaths,删除mso.dll
删除mso.dll这不重要哦,不然以后用excel 每次都提示要你重装excel
第二步、在sql的查询器中执行
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_propN'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_propN'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
图例:
第三步、在sql的查询器中执行
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
图例:
在导出数据过程中会碰到以下几种情况,可以分别按照出现的执行提示,参照下面办法处理:
1、无法创建链接服务器 "(null)" 的 OLE DB 访问接口"Microsoft.Ace.OleDb.12.0" 的实例。
解决方案:控制面板/管理工具/服务/SQL Server (SQLEXPRESS) --> 右键 属性 --> 登录 --> 设置: 登录身份=本地系统账户 --> 重启电脑
2、无法从链接服务器 "(null)" 的 OLE DB 访问接口"Microsoft.ACE.OLEDB.12.0"获取列信息。
解决方案: SQL Management Studio:SQL服务器-->服务器对象-->链接服务器-->Microsoft.ACE.OLEDB.12.0 属性-->常规-->选中:1、动态参数;2、允许进程内 (把这两项的勾去掉)。
3、链接服务器"(null)" 的 OLE DB 访问接口"Microsoft.Ace.OleDb.12.0" 指示该对象没有列,或当前用户没有访问该对象的权限
解决方案:
指定的excel文件中的列数与查询语句需要输出的列数要一致。见图例说明:
以上解决方法 我参考了下面两个网址的相关指导文章,一并感谢! https://blog.csdn.net/sundacheng1989/article/details/17925431
https://blog.csdn.net/wonsoft/article/details/7730976
|