获取SQL数据库邮件以格式化HTML表格,其中包含2列

时间:2011-03-09 20:42:33

标签: html sql-server-2005 database-mail

我正在使用SQL Server 2005,并且正在发送以HTML格式化的数据库邮件。我得到了我需要的结果,但是我很难按照我想要的方式格式化表格。

正在运行两个单独的SELECT语句来填充表行。问题是我希望它们并排显示,因为它们彼此相关,但它们只会在另一个上面显示一个。我已经尝试将它们放在一个较大的表中的两个表中,但它不会将其移位。我在大约10年内没有使用HTML,所以它可能比脚本本身更有问题。

这是包含两个select语句的@body部分:

    N'<table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
    N'<th>Store Number</th>' +
    N'<td>'+ CAST ( ( SELECT store_num
              FROM store_results 
              WHERE successful = 'N'
                OR successful IS NULL 
              ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) )+'</td>'+
    N'</td>' +
    N'<td><table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
    N'<th>Reason</th>' +
    N'<td>'+CAST ( ( SELECT 
                CASE successful
                WHEN 'N' THEN 'Failed'              
                    ELSE 'Did Not Run'
                END
            FROM store_results where successful = 'N' OR successful is null
            ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) )+'</td>'+
    N'</td>' +
    N'</table>

1 个答案:

答案 0 :(得分:1)

我终于弄明白了。您必须首先设置标题TD以创建列。而不是只使用格式,让它看起来你想要的。像这样:

N'<table border="1" cellpadding="0" cellspacing="0"><font face="arial">' +
N'<tr><td>Store Number</td><td>Reason</td></tr>' +
N'<td>'+ CAST ( ( SELECT 
    td = store_num
    td = reason
        from store_results
        ORDER BY store_num ASC FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) +  
N'</table>

您可以通过坚持使用td / @ attribute = case来实际根据查询结果格式化您的单元格...如果您想了解它。我最后将所有结果放入sp中的临时表中,以保持html生成代码更简单。