SQL Server存储过程HTML邮件数值高亮失效问题求助
解决SQL Server邮件通知中HTML样式被转义的问题
你遇到的问题根源是FOR XML PATH默认会对XML特殊字符(比如<、")进行转义,导致你拼接的<span>标签变成了转义后的文本,邮件客户端只会把它当成普通文字显示,不会解析成HTML样式。
修改方案
要让HTML标签正常生效,需要在处理XML结果时提取未转义的原始HTML内容,通过XML.value()方法即可实现,具体代码修改如下:
IF (SELECT COUNT(*) FROM #Temp_Warning) > 0 BEGIN --Format email content in HTML DECLARE @tableHTML NVARCHAR(MAX); SET @tableHTML = N'<tr>' + N'<td><b>Test Name</b></td>' + N'<td><b>Formatted result</b></td>' + -- 补全原代码缺失的</b>闭合标签 N'</tr>' + -- 使用.value()方法获取未转义的HTML内容 (SELECT td = T.REPORTED_NAME,'', td = CASE WHEN T.FORMATTED_ENTRY < 10 THEN N'<span style="background-color:red;">' + CAST(T.FORMATTED_ENTRY AS NVARCHAR(20)) + N'</span>' ELSE CAST(T.FORMATTED_ENTRY AS NVARCHAR(20)) END,'' FROM #Temp_Warning T ORDER BY T.REPORTED_NAME FOR XML PATH('tr'), TYPE ).value('(./text())[1]', 'NVARCHAR(MAX)') END
关键修改说明
- 移除外层
CAST(...) AS NVARCHAR(MAX),改用.value('(./text())[1]', 'NVARCHAR(MAX)')直接从XML类型结果中提取未转义的文本,确保HTML标签不会被转义。 - 修复原代码中
<td><b>Formatted result</td>缺失的</b>标签,保证HTML结构完整,避免邮件客户端解析异常。 - 如果
T.FORMATTED_ENTRY是数值类型,显式转换为字符串(CAST(...) AS NVARCHAR(20)),避免隐式转换导致的拼接错误。
内容的提问来源于stack exchange,提问作者Peter Nguy Nguyen
相关产品推荐
相关产品推荐

