SQL Server 2012:如何在单封邮件中嵌入两个查询结果表格?
解决方案:在同一邮件中添加第二个表格到SQL Server邮件通知里
嘿,我来帮你搞定这个问题!要在同一封邮件里加入第二个表格,核心思路就是把第二个查询的结果也转换成HTML表格格式,然后和第一个表格的HTML代码拼接在一起就行。下面是修改后的完整代码,我加了注释帮你理解每一步:
-- 先确保你的两个数据源都准备好,这里假设第二个表格来自#ANOTHER_TABLE(你可以替换成自己的查询) SELECT * FROM #WKPLAN; SELECT * FROM #ANOTHER_TABLE; -- 你的第二个查询结果 DECLARE @xml NVARCHAR(MAX); DECLARE @xml2 NVARCHAR(MAX); -- 新增:存储第二个表格的XML DECLARE @body1 NVARCHAR(MAX); -- 生成第一个表格的XML结构(来自#WKPLAN) SET @xml = CAST(( SELECT [Day of Week] AS 'td', '', [Cycle_%_MTD] as 'td', '' FROM #WKPLAN FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX)); -- 新增:生成第二个表格的XML结构(替换成你的实际列和数据源) SET @xml2 = CAST(( SELECT ColumnName1 AS 'td', '', ColumnName2 as 'td', '', ColumnName3 as 'td' -- 替换成你的列名 FROM #ANOTHER_TABLE -- 替换成你的第二个数据源(可以是临时表、查询语句等) FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX)); -- 构建邮件主体:先添加第一个表格 SET @body1 = '<html><body> <H5>See below for the weekend plan</H5> <table border = 1> <tr> <th><center>Day of Week</center></th> <th><center>Cycle % MTD</center></th> </tr>' + @xml + '</table>'; -- 新增:把第二个表格拼接到邮件主体里 SET @body1 = @body1 + ' <H5>这里写第二个表格的标题(可自定义)</H5> <table border = 1> <tr> <th><center>列1标题</center></th> <!-- 替换成你的列标题 --> <th><center>列2标题</center></th> <th><center>列3标题</center></th> </tr>' + @xml2 + '</table></body></html>'; -- 执行邮件发送存储过程 EXEC data.dbo.usp_EmailProgress @Reply_to = '', @Recipients = '', @copy_recipients = '', @Subject = 'Email with Two Tables', @body = @body1, @body_format ='HTML';
关键注意点:
- 数据源适配:把
#ANOTHER_TABLE和对应的列名替换成你实际的第二个查询内容,甚至可以直接把FROM #ANOTHER_TABLE换成你的查询语句(比如FROM (SELECT ...) AS TempTable) - HTML结构完整性:确保每个表格的
<table>、<tr>、<th>标签都正确闭合,避免邮件显示错乱 - 自定义样式:如果需要调整表格样式(比如边框、对齐方式),可以修改
<table>标签的属性,或者添加CSS样式
内容的提问来源于stack exchange,提问作者Joyиal Ali
相关产品推荐
相关产品推荐

