SqlServer通过sql语句发送表格形式的邮件
适用情况:
日常维护工作中,有一些需要检测异常数据并通知客户或我司技术人员的,可以通过表格形式发送邮件以便于更直观的看到是哪些数据,再去进行数据的处理。
比如:短信发送情况通知、上下期读数不衔接、已更新读数未生成水费等等情况,都可以用表格发送邮件。
效果如下:
(前提:需要配置数据库邮件,详情请搜索sqlserver发送邮件配置)
原理是拼接数据成html格式显示
以下是举例
先将需要发送的数据查询到临时表,再从临时表取数据发送
declare @tableHtml nvarchar(Max)--邮件正文内容
set @tableHtml=
+N'<H4>'+convert(varchar(19),DATEADD(day,-1,getdate()),120)+'至'+convert(varchar(19),GETDATE(),120)
+'已抄表未生成费用</H4>'--此处是表格前面的内容
+N'<Table border="1">'--表宽 写上1就是有边框
+N'<tr><th>meterno</th>
<th>premeterreaddate</th>
<th>nowmeterreaddate</th>
<th>preread</th>
<th>nowread</th>
<th>yearmonth</th>'--th标签内的都是表头,根据需求加减和改名,
+CAST((select td=meterno,'',
td=premeterreaddate,'',
td=premeterreaddate,'',
td=Preread,'',
td=nowread,'',
td=yearmonth,''--td=后面的都是数据,按着样子修改即可
from #temp
where pcid='Systemmanager' --条件,根据实际情况填写
for XML PATH('tr'),TYPE)AS nvarchar(MAX))
+N'</TABLE>'
exec msdb.dbo.sp_send_dbmail
@Profile_name='db_mail',--配置的数据库邮件名称,这个不能有误
@Recipients='一个邮箱@qq.com;两个邮箱@qq.com',--发送的邮箱,可有多个,用分号隔开
@subject='已抄表未生成费用',--邮件的标题
@body=@tableHtml,
@body_format='HTML';
可根据上述sql语句按需修改。