sp_send_dbmail中套用HTML样式

本文介绍如何利用SQL动态生成HTML邮件,并通过特定的SQL表达式为表格元素应用CSS样式,实现邮件中表格的自定义外观。
使用sp_send_dbmail发送HTML格式的邮件时,将某个列<td>套用Style
 SET @tableHTML = N'<HTML><HEAD> 
                         <style type="text/css">
                         th
                         {  height:30px;
                            width: 80px;
                            text-align:center;   
                         }
                         td
                         {  height:30px;
                            width: 80px;
                            text-align:left;
                            colspan="1";             
                         }
                         .amt{
			    text-align:right;
                         }     
                        </style>
                      </HEAD>
                    <BODY>' + @tableHead
                    + N'<table border="1" bordercolor="black" cellpadding="0" cellspacing="0" ><tr>'
                    + N'<th>公司别</th><th>报销日期</th><th class="no">表单单号</th><th>报销人</th><th>姓名</th><th>所在部门</th><th class="dept">部门名称</th>'
                    + N'<th>扣减部门</th><th  class="dept">部门名称</th><th class="content">摘要</th><th>科目</th><th>科目名称</th>'
                    + N'<th class="currency">币别</th><th>报销金额</th></tr>'
                    + CAST(( SELECT CASE WHEN amts>1000 THEN 'red' ELSE 'green' END AS '@class',
                                    td = company,
                                    '' ,
                                    td = paydate,
                                    '' ,
                                    td = payid,
                                    '' ,
                                    td = employeeid,
                                    '' ,
                                    td = employee,
                                    '' ,
                                    td = deptid,
                                    '' ,
                                    td = dept,
                                    '' ,
                                    td = factdeptid ,
                                    '' ,
                                    td = factdept,
                                    '' ,
                                    td = content,
                                    '' ,
                                    td = account,
                                    '' ,
                                    td = accdesc,
                                    '' ,
                                    td = currency,
                                    '' ,
                                    'amt' AS 'td/@class' ,
                                    CONVERT(DECIMAL(12, 2), amts) AS 'td'
                             FROM   sometable
                           FOR
                             XML PATH('tr') ,
                                 TYPE
                           ) AS NVARCHAR(MAX)) + N'</table><br><br>'
                    + @tableFoot + '</body></HTML>'


CASE WHEN amts>1000 THEN 'red' ELSE 'green' END AS '@class'
上面的SQL会更具条件被解释为

<tr class='red'>或者<tr class='green'>

实现行样式

'amt' AS 'td/@class' ,
 CONVERT(DECIMAL(12, 2), amts) AS 'td'
上面的SQL会被解释为

<td class='amt'>[amts]</td>,实现针对某个列套用样式


EXEC msdb.dbo.sp_send_dbmail @profile_name = 'DatabaseMailProfile',
@recipients = @mailadd ,@copy_recipients = @copymailadd,
@subject = N'Mail Subject', @body = @tableHTML,
@body_format = 'HTML'		




在 SQL Server 中,`msdb..sp_send_dbmail` 存储过程支持通过参数将查询结果作为附件发送。然而,该存储过程默认情况下仅允许附加一个查询结果文件(即一次执行只能附加一个查询结果)。若需要发送多个 Excel 附件,则需通过多次调用 `sp_send_dbmail` 来实现。 以下是一个示例,展示如何发送多个 Excel 格式的附件: ```sql -- 发送第一个附件 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'YourProfileName', @recipients = 'recipient1@example.com', @subject = 'Multiple Excel Attachments - Part 1', @body = 'Please find the attached Excel file.', @query = 'SELECT * FROM YourDatabase.dbo.YourTable1', @execute_query_database = 'YourDatabase', @attach_query_result_as_file = 1, @query_attachment_filename = 'Report1.xlsx', @query_result_header = 1, @query_result_width = 256; -- 发送第二个附件 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'YourProfileName', @recipients = 'recipient1@example.com', @subject = 'Multiple Excel Attachments - Part 2', @body = 'Please find the attached Excel file.', @query = 'SELECT * FROM YourDatabase.dbo.YourTable2', @execute_query_database = 'YourDatabase', @attach_query_result_as_file = 1, @query_attachment_filename = 'Report2.xlsx', @query_result_header = 1, @query_result_width = 256; ``` ### 注意事项: - 每个 `sp_send_dbmail` 调用可以附加一个文件,因此必须为每个 Excel 文件单独调用一次。 - 如果需要将多个查询结果合并到一个 Excel 文件中,可以在数据库端进行数据整合后再发送。 - 确保邮件配置文件 (`@profile_name`) 已正确配置并具有发送权限[^3]。 - 邮件正文、主题等可根据需求自定义。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值