楼主: snoxmk

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

[复制链接]
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
21#
发表于 2014-6-17 17:24 | 只看该作者
snomxk 发表于 2014-6-16 18:40
这个写法只能邮件里出来一二条记录,

不好意思 ,没理解您的意思,直接@body=@tableHTML;
格式显示正常了。也是需要的结果,
谢谢!

使用道具 举报

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

表格显示右对齐<div align="right">那个选项加哪?

使用道具 举报

回复
论坛徽章:
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
23#
发表于 2014-6-18 08:01 | 只看该作者
snomxk 发表于 2014-6-17 17:24
不好意思 ,没理解您的意思,直接@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
24#
发表于 2014-6-18 10:37 | 只看该作者
snomxk 发表于 2014-6-17 17:48
表格显示右对齐那个选项加哪?

试了一下 把@tableHTML替换一下,再发邮件,看看是否满足你的要求。
  1. select replace(@tableHTML,'<tr>','<tr align="right">')
复制代码

使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
25#
发表于 2014-6-18 10:59 | 只看该作者
本帖最后由 snomxk 于 2014-6-18 11:02 编辑
interstellar 发表于 2014-6-18 10:37
试了一下 把@tableHTML替换一下,再发邮件,看看是否满足你的要求。

谢谢帮助,但重新测试一下:但要把数字右对齐还是不好处理。

@body = @tableHTML    --不需要执行 select @tableHTML,只需要把查询结果放到变量@tableHTML就可以了

--@body = select replace(@tableHTML,'<tr>','<tr align="right">');  
--不能达到要求,这个结果直接显示:select replace(@tableHTML,'','')

--@query ='select replace(@tableHTML,''<tr>'',''<tr align="right">'')'  
--也不行,这样的话要声明变量把那一大段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
26#
发表于 2014-6-18 11:04 | 只看该作者
snomxk 发表于 2014-6-18 10:59
@body = @tableHTML    --不需要执行 select @tableHTML,只需要把查询结果放到变量@tableHTML就可以了
...

晕,不是这么用的,我给个select只是为了让你sql查询分析器中看结果的。你重新弄个变量比如叫@tableHTML2

然后
  1. @tableHTML2=replace(@tableHTML,''<tr>'',''<tr align="right">'')
复制代码
然后再用
  1. @body = @tableHTML2
复制代码

使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
27#
发表于 2014-6-18 14:26 | 只看该作者
interstellar 发表于 2014-6-18 11:04
晕,不是这么用的,我给个select只是为了让你sql查询分析器中看结果的。你重新弄个变量比如叫@tableHTML2 ...

set @tableHTML = replace(@tableHTML,'<tr>','<tr align="right">');

加一句这个语句可以实现把整个表格全部都右对齐,

但要实现只是数字部分对齐还是不会弄,

使用道具 举报

回复
论坛徽章:
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
28#
发表于 2014-6-18 14:40 | 只看该作者
snomxk 发表于 2014-6-18 14:26
set @tableHTML = replace(@tableHTML,'','');

加一句这个语句可以实现把整个表格全部都右对齐,

这个……只能说用户的需求是无止境的

可以肯定是可以地,只是要花时间慢慢整…有时间可以把上面16楼的那个博客的内容好好研究研究,弄通了的话,就是:只有你想不到没有做不到的格式。

使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
29#
发表于 2014-6-18 15:54 | 只看该作者

感谢@hsuharry 15楼提供的那个网页的地址!

本帖最后由 snomxk 于 2014-7-17 14:03 编辑
interstellar 发表于 2014-6-18 14:40
这个……只能说用户的需求是无止境的

可以肯定是可以地,只是要花时间慢慢整…有时间可以把上面16 ...



那个.tw的网页经常打不开,以下是那个网页的内容,确实要好好看下!
  1. 幾項重點進行說明:
  2. 1.  Age >40 以紅字表示(數值欄位置右處理)
  3. 2.  Sex =F 之資料,以黃色底色呈現
  4. 3.  Company資料將開啟Yahoo Finance指定公司之股票資料
  5. ex: http://finance.yahoo.com/q?s=MSFT&ql=0%3e

  6. 結果:(Email)


  7. SQL:

  8. CREATE TABLE #Rec
  9. (
  10.    [No]          [int]
  11. ,  [Name]       [varchar](20)
  12. ,  [Age]        [int]
  13. ,  [Sex]        [CHAR](1)
  14. ,  [Company]   [varchar] (100)
  15. )

  16. INSERT INTO #Rec
  17. ([No], [Name], [Age], [Sex], [Company])
  18. SELECT 1, 'John',  25, 'M', 'MSFT'
  19. UNION ALL
  20. SELECT 2, 'Roger', 48, 'M', 'AMAT'
  21. UNION ALL
  22. SELECT 3, 'May',   20, 'F', ''
  23. UNION ALL
  24. SELECT 4, 'Jones', 43, 'M', 'KLAC'

  25. DECLARE @HTML    nvarchar(MAX) ;
  26. SET @HTML =
  27.   N'<body style="font-family: Verdana; font-size: 8pt">'+
  28.   N'<H5>Record</H5>' +
  29.   N'<table border="1" cellspacing="1" cellpadding="1" style="border-collapse:collapse" width="300">' +
  30.   N'  <tr style="color:White;background-color:#F88017;">' +
  31.   N'    <th>No</th><th>Name</th><th>Age</th><th>Sex</th><th>Company</th>' +
  32.   N'  </tr>' +
  33.     CAST ( (
  34.          SELECT     
  35.              --(1). No
  36.              [No] td, ''  
  37.                                                
  38.              --(2). Name
  39.              , [Name] td, ''
  40.                
  41.              --(3). Age; 1. 超過40時,Fore Color設為紅色; 2.數值置右對齊
  42.              , CASE WHEN [Age] >=40 THEN 'color:red; font-weight:bold' END [td/@style]
  43.              , 'right' [td/@align]
  44.              , [Age] td, ''   
  45.                            
  46.              --(4). [Sex]; 3. 當為F時,BG Color設為Yellow
  47.              , CASE WHEN [Sex]= 'F'  THEN '#FFFF00' END [td/@bgcolor]
  48.              , [Sex] td, ''

  49.              --(5). [Company]; 4.開啟網頁,以資料庫值帶入Query String中
  50.              , 'http://finance.yahoo.com/q?s='+ [Company] +'&ql=0>' [td/a/@href]
  51.              , [Company]  [td/a]                        
  52.           FROM  #Rec
  53.           ORDER BY [No]
  54.           FOR XML PATH('tr'), TYPE
  55.     ) AS   nvarchar(MAX) ) +
  56.   N'</table>' ;

  57. EXEC msdb.dbo.sp_send_dbmail @recipients='HarryHsu@xxxxxxx.com;'
  58.     , @subject             = 'HTML Mail Test'
  59.     , @body                = @HTML
  60.     , @body_format    = 'HTML'


  61. 註:HTML Tag使用/概念及SQL MAIL設定請自行參閱相關文件。
复制代码


使用道具 举报

回复
论坛徽章:
2
美羊羊
日期:2015-03-04 14:52:282015年新春福章
日期:2015-03-06 11:58:18
30#
发表于 2014-6-19 10:41 | 只看该作者
附上:SQL2005 数据库邮件设置


SQL2005 中添加了数据库邮件功能,使用起来还是很方便地。
1、打开SQL Server 2005 外围应用配置器,选择“功能的外围应用配置器”,选择“数据库邮件”,勾选“启用数据库邮件存储过程”,点“确定”退出。
2、建立发送邮件的Sql server用户,例如mailuser ,给mailuesr添加权限,用户映射中添加msdb数据库的“DatabaseMailUserRole”权限。
3、打开 Sql Server Managerment Studio ,展开本地数据库下的“管理”,选择“数据库邮件”,右键选“配置数据库邮件”,填写配置项;例如,配置文件名:mail_Config,添加一个发送邮件的账户,也可以添加多个账户。按照配置步骤完成配置。
4、重复步骤3中,右键“数据库邮件”,选择“发送测试电子邮件”,填写发送的邮件地址发送。
以上就完成了数据库邮件的配置。下面看看简单的应用:
应用一、在作业完成后发送邮件通知
1、展开SQL server 代理,添加一个操作员,写上操作员的名字和Mail地址。
2、添加作业,配置作业的内容和步骤,选择“通知”,勾选“电子邮件”,后面选择刚才添加的操作员,后面选择“当作业失败时”,确定完成。
3、打开Sql server 代理的属性,选择“警报系统”,勾选“启动邮件配置文件”,“邮件系统”选择数据库邮件,“邮件配置文件”选择刚才创建的配置文件名,也就是“mail_Config”。确定完成。
4、一定要重启Sql server 代理,这点很重要,不然发不出邮件。我试了好长时间呢,就是因为没重启Sqlserver代理。
应用二、可以随时调用邮件存储过程发送邮件,也可以在程序中调用
在MSDB数据库中,发送邮件
ues MSDB
go
EXEC msdb..sp_send_dbmail 参数......   后面有很多参数
@profile_name                               -- 数据库邮件配置名称
, @recipients                                  -- 收件人列表,以分号分隔
, @copy_recipients                         -- 抄送人列表,以分号分隔
, @blind_copy_recipients                -- 密件抄送人列表,以分号分隔
, @subject                                      -- 邮件的主题, SQL Server Message
, @body                                         -- 邮件正文
, @body_format                            -- TEXT(默认) / HTML
, @importance                                -- 邮件的重要性:Low / Normal / High
, @sensitivity                                -- 邮件的敏感度:Normal / Personal / Private / Confidential
, @file_attachments                     -- 附件的文件名列表,以分号分隔。必须使用绝对路径指定列表中的文件
, @query                                      -- 要执行的查询,任何有效的Transact-SQL。查询结果可以作为文件附加,或包含在电子邮件的正文中。
, @attach_query_result_as_file    -- 指定查询结果集是否作为附件返回,0-正文(默认) / 1-附件
, @query_attachment_filename   -- 附件使用的文件名
, @query_result_header                -- 指定查询结果是否包含列标题,0-不包含 / 1-包含(默认)
, @query_result_separator          -- 列分隔符,默认为空格
, @query_result_width                  -- 每列最大宽度
, @append_query_error               -- query错误时发送电子邮件: 1-发送,错误消息包含在电子邮件的正文中。0-不发送电子邮件(默认)
察看发送情况
user MSDB
go
SELECT * FROM sysmail_allitems
SELECT * FROM sysmail_mailitems
SELECT * FROM sysmail_event_log

使用道具 举报

回复

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

本版积分规则 发表回复

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