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语句按需修改。