楼主: snoxmk

[讨论] SQLserver怎么将SQL结果保存为EXCEL并自动以邮件形式发送出来?

[复制链接]
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
11#
发表于 2014-6-16 12:02 | 只看该作者
interstellar 发表于 2014-6-16 08:26
首先你在查询分析器里跑出来要能对,说白了就是ping一段html语句来,然后作为邮件的body。主要就是用语句 ...
  1. exec msdb..sp_send_dbmail
  2. @profile_name= 'admin',
  3. @recipients = 'admin@XXX.com',
  4. @subject = '查询结果',
  5. @append_query_error = 1,
  6. --@attach_query_result_as_file = 1,
  7. --@query_attachment_filename = 'a.txt',
  8. --@body = '仓库明细。',
  9. @body_format = 'html',
  10. @query =
  11. '
  12. DECLARE @tableHTML  NVARCHAR(MAX) ;
  13. --for xml auto,XMLDATA
  14. --FOR XML raw
  15. --for browse
  16. SET @tableHTML =
  17.     N''<H1>仓库表</H1>'' +
  18.     N''<table border="1">'' +
  19.     N''<tr><th>CODE</th>'' +
  20.     CAST ( (
  21. select a.fname,a.fnumber,a.fitemid
  22. from AIS20140320.dbo.t_stock  a
  23. FOR XML auto,PATH(''tr''),
  24. TYPE ) AS NVARCHAR(MAX) ) +
  25.     N''</table>'' ;
  26. select @tableHTML
  27. '
复制代码
以上代码,改得应该有问题,邮件的结果不是以表格显示,而且只有部分记录能取到,结果出下图


请帮忙看下怎么处理?谢谢!

使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
12#
发表于 2014-6-16 15:03 | 只看该作者
kinwar 发表于 2014-6-16 11:39
请参考OPENROWSET() 和 OPENDATASOURCE()  ....

INSERT INTO OPENROWSET('Microsoft.ACE.OLEDB.12.0',
...

这个命令需要开启cmdshell??

使用道具 举报

回复
论坛徽章:
10
2010新春纪念徽章
日期:2010-03-01 11:06:22ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-09-28 10:55:55懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
13#
发表于 2014-6-16 16:05 | 只看该作者
本帖最后由 interstellar 于 2014-6-16 16:08 编辑
snomxk 发表于 2014-6-16 12:02
以上代码,改得应该有问题,邮件的结果不是以表格显示,而且只有部分记录能取到,结果出下图

select部分写得不对。你用我改的这段试试。直接@body= @tableHTML;
  1. SET @tableHTML =
  2.     N'<H1>仓库表</H1>' +
  3.     N'<table border="1">' +
  4.     N'<tr><th>CODE</th>' +'<th>CODE1</th>'+'<th>CODE2</th>'+
  5.     CAST ( (
  6. select td=a.fname,'',td=a.fnumber,'',td=a.fitemid
  7. from AIS20140320.dbo.t_stock  a
  8. FOR XML PATH('tr'),TYPE ) AS NVARCHAR(MAX) ) +
  9.     N'</table>' ;
  10. select @tableHTML
复制代码

使用道具 举报

回复
论坛徽章:
10
2010新春纪念徽章
日期:2010-03-01 11:06:22ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-09-28 10:55:55懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
14#
发表于 2014-6-16 16:12 | 只看该作者
snomxk 发表于 2014-6-16 15:03
这个命令需要开启cmdshell??

openrowset这个可能是要开启Ad Hoc Distributed Queries选项;

使用道具 举报

回复
论坛徽章:
0
15#
发表于 2014-6-16 16:15 | 只看该作者
可以用一組SQL產生HTML MAIL, 上面還可以有Hyperlink, 請參考我的blog文章, 如下
http://sqlqna.blogspot.tw/2013/08/sqlhtml-table-sql2005.html

使用道具 举报

回复
论坛徽章:
4
技术图书徽章
日期:2014-05-09 11:17:21青年奥林匹克运动会-射击
日期:2014-09-01 11:46:57itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25
16#
发表于 2014-6-16 17:25 | 只看该作者
interstellar 发表于 2014-6-16 16:12
openrowset这个可能是要开启Ad Hoc Distributed Queries选项;

是的,2个都要打开

使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
17#
发表于 2014-6-16 18:40 | 只看该作者
interstellar 发表于 2014-6-16 16:05
select部分写得不对。你用我改的这段试试。直接@body= @tableHTML;

这个写法只能邮件里出来一二条记录,

使用道具 举报

回复
论坛徽章:
10
2010新春纪念徽章
日期:2010-03-01 11:06:22ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-09-28 10:55:55懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
18#
发表于 2014-6-17 08:28 | 只看该作者
snomxk 发表于 2014-6-16 18:40
这个写法只能邮件里出来一二条记录,

可能你有些字段超长。

使用道具 举报

回复
论坛徽章:
10
2010新春纪念徽章
日期:2010-03-01 11:06:22ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-09-28 10:55:55懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
19#
发表于 2014-6-17 08:30 | 只看该作者
snomxk 发表于 2014-6-16 18:40
这个写法只能邮件里出来一二条记录,

另外看看你在配置sql邮件的时候有没有限制邮件大小等等;

使用道具 举报

回复
论坛徽章:
10
2010新春纪念徽章
日期:2010-03-01 11:06:22ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09itpub13周年纪念徽章
日期:2014-09-28 10:55:55懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
20#
发表于 2014-6-17 08:32 | 只看该作者
kinwar 发表于 2014-6-16 17:25
是的,2个都要打开

要开cmdshell这个……安全性大打折扣。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表