2014-04-03 45 views
0

好吧,我有一个工作,它运行4个独立的选择查询。SQL作业输出为HTML表格而不是文本

EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'Database Email', 
    @recipients = '[email protected]', 
    @subject = 'SQL Replication Deletion Check', 
    @query = ''SELECT '\\server1\folder1\SQL\check.sql'' 
SELECT '' '' 
SELECT ''1'' 
SELECT * FROM [repserv].[dbo].[1repdupecheck] 
SELECT '' '' 
SELECT ''2'' 
SELECT * FROM [repserv].[dbo].[2repdupecheck] 
SELECT '' '' 
SELECT ''3'' 
SELECT * FROM [repserv].[dbo].[3repdupecheck] 
SELECT '' '' 
SELECT ''4'' 
SELECT * FROM [repserv].[dbo].[4repdupecheck]', 
    @attach_query_result_as_file = 0, 
    @query_result_no_padding = 1, 
    @query_result_header = 0; 

目前它输出的文字很好,就像这样。

\\server1\folder1\SQL\check.sql 

1 
1820 '45074', 
1854 '45074', 
1822 '45488', 

2 
1819 '45074', 
1853 '45074', 
1851 '45488', 

3 
1871 '43971', 
1873 '43971', 
1875 '44429', 

4 
1842 '42729', 
1857 '42729', 
1870 '43971', 

但是我希望它是表格格式,所以我可以轻松地突出显示一列数据。

我明白这可以用HTML来完成,这是唯一可能的方式,如果是的话,我会怎么做呢?

回答

1

,我通常做的方式是把这些结果为@body参数,而不是@query参数。也就是说,我首先获得所有结果并格式化它们,然后简单地将它传递给过程,而不是在过程调用中即时执行。

这可能是这个样子:

DECLARE @EmailBody NVARCHAR(MAX) = 'Some Text Here <table><thead><tr><th>SomeHeaderOne</th><th>SomeHeaderTwo</th></tr></thead><tbody>##TableBody##</tbody>' 
DECLARE @EmailTableContent NVARCHAR(MAX) 

SELECT @EmailTableContent = COALESCE(@EmailTableContent + '', '') 
         + '<tr>' 
         + '<td style="border-bottom: solid 1px #ddd; padding: 20px;">' + ColumnOne + '</td>' 
         + '<td style="border-bottom: solid 1px #ddd; padding: 20px; text-align: center;">' + ColumnTwo + '</td>' 
         + '</tr>' 
FROM TheTable 
WHERE ColumnOne = 'Something' 

SELECT @EmailBody = REPLACE(@EmailBody, '##TableBody##', @EmailTableContent) 

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'Database Email', 
@recipients = '[email protected]', 
@subject = 'SQL Replication Deletion Check', 
@body = @EmailBody, 
+0

试图与上面的代码要做到这一点,但不能让它在所有的工作,不太清楚去哪里等 – Matt

+0

好了,你有'@ EmailBody',它定义了电子邮件和表格的结构。然后,'@ EmailTableContent'生成一个HTML字符串,每行都有一个'',你可以在其中更改'ColumnOne'和'ColumnTwo';你会将'FROM TheTable'改为'FROM [repserv]。[dbo]。[1repdupecheck]'。由于您需要四个不同的表格,可能需要四次,可能有四个不同的变量。然后,将生成的HTML注入到@EmailBody中,并执行如图所示的过程。 – Tom

相关问题