MS SQL Server结果生成HTML表格并发送邮件
2017-06-27 11:17
441 查看
配置邮件服务器
在SQL管理器中找到“管理”,在“数据库邮件”上面右键,选择“配置数据库邮件”,如果没有开启,系统会提示开启。进去之后配置好账户和配置文件
生成HTML表格
使用SQL的XML功能生成表格,需要格式的话可以使用Style来设置,示例:DECLARE @emailBody NVARCHAR(MAX); SET @emailBody = N'<style>table{table-layout:fixed;width:1200px;border:1px solid #000000;border-collapse:collapse;font-size:12px;empty-cells:show;}' + N'th,td{border:1px solid #000000;padding:3px;}</style>' + N'<H2>' + @cHandler + '在' + CONVERT(VARCHAR(19), @dnverifytime, 120) + '审核的采购入库单《' + @cCode + '》发生超采购订单收货情况</H2>' --标题 + N'<table>' + N'<thead><tr>' + N'<th style="width:80px;">采购订单</th>' + N'<th style="width:90px;">存货编码</th>' + N'<th style="width:350px;">存货名称</th>' + N'<th style="width:150px;">规格</th>' + N'<th style="width:80px;">订单数量</th>' + N'<th style="width:80px;">已收数量</th>' + N'<th style="width:80px;">超收数量</th>' + N'<th style="width:60px;">单位</th>' + N'<th style="width:80px;">超收率</th>' + N'<th style="width:60px;">采购员</th>' + N'</tr></thead><tbody>' --表头 + CAST(( SELECT poM.cPOID AS td , '' , inv.cInvCode AS td , '' , inv.cInvName AS td , '' , ISNULL(inv.cInvStd, ' ') td , '' , '<div style="text-align:right;">' + CAST(CAST(po.iQuantity AS DECIMAL(20, 4)) AS VARCHAR(20)) + '</div>' AS td , '' , '<div style="text-align:right;">' + CAST(CAST(po.iReceivedQTY AS DECIMAL(20, 4)) AS VARCHAR(20)) + '</div>' AS td , '' , '<div style="text-align:right;">' + CAST(CAST(po.iReceivedQTY - po.iQuantity AS DECIMAL(20, 4)) AS VARCHAR(20)) + '</div>' AS td , '' , unit.cComUnitName AS td , '' , '<div style="text-align:right;">' + CAST(CAST(( po.iReceivedQTY - po.iQuantity ) * 100 / po.iQuantity AS DECIMAL(18, 2)) AS VARCHAR(20)) + '%</div>' AS td , '' , poM.cMaker td , '' FROM Inserted i INNER JOIN dbo.rdrecords01 d ON i.ID = d.ID INNER JOIN PO_Podetails po ON d.iPOsID = po.ID INNER JOIN dbo.PO_Pomain poM ON poM.POID = po.POID INNER JOIN dbo.Inventory inv ON inv.cInvCode = d.cInvCode INNER JOIN dbo.ComputationUnit unit ON unit.cComunitCode = inv.cComUnitCode WHERE po.iReceivedQTY > po.iQuantity FOR XML PATH('tr') , TYPE ) AS NVARCHAR(MAX)) + N'</tbody></table>';
因为生成XML时会对<>等标签进行编码,所以还需要进一步替换:
SELECT @emailBody = REPLACE(REPLACE(@emailBody, '<', '<'), '>', '>');
发邮件
一下步就是把生成的内容通过邮件发送出去了:EXEC msdb.dbo.sp_send_dbmail @profile_name = 'dgml', @recipients = @recipientsList, @subject = '超采购订单收货提醒!', @body = @emailBody, @body_format = 'html';
上面的收件人可以直接拼出来,也可以从数据库里面取出来,下面是取数据库内容,每个收件人的格式:人名<邮件地址>,多个收件人之间用;隔开
DECLARE @recipientsList NVARCHAR(MAX); --收件人 SELECT @recipientsList = REPLACE(REPLACE(STUFF(( SELECT ';' + u.cUser_Name + '<' + u.cUserEmail + '>' FROM dbo.WG_Subscription_Users su INNER JOIN dbo.UserHrPersonContro up ON up.cPsn_Num = su.cPsn_Num INNER JOIN UFSystem.dbo.UA_User u ON u.cUser_Id = up.cUser_Id WHERE su.subscriptionID = 1 AND ISNULL(u.cUserEmail, '') <> '' FOR XML PATH('') ), 1, 1, ''), '<', '<'), '>', '>');
相关文章推荐
- MS SQL Server结果生成HTML表格并发送邮件
- MS SQL Server常用管理sql statement--发送邮件
- python写的调用ms sqlserver数据并发送邮件的小程序
- python写的调用ms sqlserver数据并发送邮件的小程序
- MS SQL Server Reporting services 生成报表
- 在MS SQL Server中返回更加准确的分页结果
- 分页存储过程(二)在MS SQL Server中返回更加准确的分页结果
- iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)
- ms sql server中检测邮件地址的函数
- Sqlserver Job失败发送邮件给管理员 配置
- 分页存储过程(四)在MS SQL Server中打造更加准确,且有一点效率提升的的分页结果
- JAVA自动生成sql结果到excel,并以附件方式发送到指定邮箱
- 使用sql server+jmail组件发送邮件
- CodeSmith 5.0工具实例篇系列4——根据表生成修改的存储过程,针对MS Sqlserver
- 在SQL SERVER中发送邮件的代码小例
- 分页存储过程(五)在MS SQL Server中打造更加准确,且有一点效率提升的的分页结果
- SQL Server中发送邮件的新方式
- 彻底解决Ms sql server 2000中的最大流水号的生成问题
- 分页存储过程(二)在MS SQL Server中返回更加准确的分页结果
- SQL Server Reporting Service被McAfee禁止发送邮件问题