You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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             

关键修改说明

  1. 移除外层CAST(...) AS NVARCHAR(MAX),改用.value('(./text())[1]', 'NVARCHAR(MAX)')直接从XML类型结果中提取未转义的文本,确保HTML标签不会被转义。
  2. 修复原代码中<td><b>Formatted result</td>缺失的</b>标签,保证HTML结构完整,避免邮件客户端解析异常。
  3. 如果T.FORMATTED_ENTRY是数值类型,显式转换为字符串(CAST(...) AS NVARCHAR(20)),避免隐式转换导致的拼接错误。

内容的提问来源于stack exchange,提问作者Peter Nguy Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 17:52:47