2011-03-09 75 views
2

我正在使用SQL Server 2005并发送格式为HTML的数据库邮件。我得到了我需要的结果,但是我无法按照需要格式化表格。获取SQL数据库邮件以格式化带有2列的HTML表格

有两个独立的SELECT语句正在运行,用于填充表格行。问题是我希望它们并排显示,因为它们彼此之间是相互关联的,但它们只会显示一个在另一个之上。我曾尝试将它们放入更大的表格中的两个表格中,但它不会将其移位。我在10年左右没有使用过HTML,所以这可能是一个比脚本本身更重要的问题。

这里是@body部分包含两个SELECT语句:

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> 
+0

你有可能把当前正在生成的HTML的一小部分样本放入问题中吗? (对于每个表,可能显示一行) – 2011-03-09 20:52:03

+0

正在发送的电子邮件是加密的,我无法提取最终结果HTML,但我链接到下面答案的注释中输出表的屏幕。 – 2011-03-09 21:11:27

回答

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/@属性=大小写格式基于查询的结果,你的细胞...如果你想获得看上它。我最终将所有结果放入sp的早期临时表中,以使html代码更简单。