思路:
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
难点二:邮件配置。
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://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