sql自动导出到excel并邮件 openrowset

思路:

1、新建一个存储过程ProcA,将所有导出到EXCEL的业务逻辑全放在此,用的是openrowset

2、在SQL2008里面新建一个JOB,在脚本那一步里输入运行存储过程的命令,如exec ProcA

3、配置Mail.点击管理/数据库邮件,主要是设置发送邮件的账号、用户名密码、smtp服务器(网易的是smtp.163.com)。

4、此方法只能是往同一个excel文件中写入数据,这个不能满足需求,必须借助于BAT脚本(或者SQL的exec调用cmd命令),每天定时删除后再从模板文件夹里面拷贝一个新的。

 

这样的话就可以了,但是注意到DTS是SQLSERVER2000专用的,SSIS是SQLSERVER2005开始有的,所以在SQL2008中只能导入SQL2K中的DTS,而不能新建。

 

当然,实际操作起来的话难点特多。

 

难点一:在用openrowset时,一般用的是接口是Microsoft.Jet.OLEDB.4.0,但是在win7或者在64位的Windows Server2008里面就可能行不通,必须要用Microsoft.ACE.OLEDB.12.0,当然是必须安装对应版本的Office的。

其中:Microsoft.ACE.OLEDB.12.0下载地址:http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=23734

 

refurl:http://www.mssqltips.com/sqlservertip/1202/export-data-from-sql-server-to-excel/

 

http://msdn.microsoft.com/zh-cn/library/ms190312(v=SQL.90).aspx

 

难点二:邮件配置。

refurl:http://blog.sqlauthority.com/2008/08/23/sql-server-2008-configure-database-mail-send-email-from-sql-database/

 

http://msdn.microsoft.com/en-us/library/ms175951(v=sql.105).aspx

 

http://topic.csdn.net/u/20080703/12/96547e0a-939b-4723-950d-9cd990c10701.html(教你如何添加附件)

 

难点三:从 IClassFactory 为 CLSID 为 {AA40D1D6-CAEF-4A56-B9BB-D0D3DC976BA2} 的 COM

这个是微软自身的BUG。

refurl:http://support.microsoft.com/kb/2315727

 

http://social.msdn.microsoft.com/Forums/zh-CN/sqlkjappmsmgmt/thread/c0cf7744-3b94-46c3-97dd-f5f2335b8911

 

http://connect.microsoft.com/SQLServer/feedback/details/569732/creating-an-instance-of-the-com-component-with-clsid

 

http://www.networkquestions.org/archives/534(未测试过是否能彻底解决)

 

难点四:因为 OLE DB 访问接口 'Microsoft.Jet.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。

这个在64位的操作系统里面就会出现这样的情况,解决方法是安装64位的Office以及相应的AccessDatabaseEngine.exe

refurl:http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/58c4c61e-fa86-4809-bf7d-21bacb055d3e/

 

 

相关参考资料:

1、

(原创)SQL导出到EXCEL- DTS方法、BCP方法比较

http://www.cnblogs.com/liweibird/articles/611883.html

 

2、利用作业和DTS包自动导出excel报表

http://hi.baidu.com/mmaey/item/511e5f74f94da523d7a89cd0

 

3、解决在Sql Server查询分析器中读取Excel表出现的一些问题

http://hi.baidu.com/luck001221/blog/item/97e06539192fa830b9998f79.html

 

4、延伸阅读,关于mdac2.6下载

不要相信这个mdac2.6下载,这个玩意是用来访问Access的,而不是访问Excel2007的。

 

5、此法也是基于jet4.0的。

http://www.ezloo.com/2008/10/sql_server_export_to_excel.html

 

6、比较全的openrowset用法。

http://blog.csdn.net/Limpire/article/details/2599760

 

7、如何用sql语句删除excel表中数据或更新excel表中数据

这个是不可以删除的

refurl:http://topic.csdn.net/u/20080116/20/4eb4553c-24e2-4178-bd02-2b6adb520d98.html

 

http://topic.csdn.net/u/20080325/17/4946fbdb-8963-49d2-be60-277dddd965b5.html

 

http://blog.csdn.net/tabby/article/details/1889217

 

8、如何用openrowset update excel中的数据

refurl:http://topic.csdn.net/u/20090717/17/722078ec-0873-4372-a43b-b41eb92b8d52.html

 

9、如何判断临时表是否存在

http://topic.csdn.net/t/20050609/15/4071152.html

 

附上存储过程里面执行的语句:

use msdb

sp_CONFIGURE 'show advanced', 1
GO
RECONFIGURE
GO
sp_CONFIGURE 'Database Mail XPs', 1
GO
RECONFIGURE
GO

EXEC sp_send_dbmail @profile_name='congName',
@recipients='[email protected];[email protected]',
@subject='Test message',
@body='This is the body of the test message.
Congrates Database Mail Received By you Successfully.',
@file_attachments='c:\testOrder.xlsx'

SELECT sent_status FROM sysmail_mailitems
GO
SELECT * FROM sysmail_log
GO
 

 

 

 

 

 

你可能感兴趣的:(Excel)