2014-04-03 3 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

내가 일반적으로 수행하는 방식은 @query 매개 변수가 아닌 @body 매개 변수에 이러한 결과를 넣는 것입니다. 즉, 먼저 모든 결과를 가져 와서 형식을 지정한 다음 프로 시저 호출시 즉시 수행하는 대신 프로 시저로 전달합니다.

이 다음과 같이 보일 수 있습니다

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'는'RowOne'과'ColumnTwo'를 변경할 각 행에 대해 ''인 HTML 문자열을 생성합니다. 당신은'FROM TheTable'을'FROM [repserv]. [dbo]. [1repdupecheck]'로 바꿀 것입니다. 네 가지 테이블을 원하기 때문에 네 번해야 할 것입니다. 아마도 네 가지 다른 변수를 가질 수 있습니다. 그런 다음 생성 된 HTML을 @EmailBody에 삽입하고 그림과 같이 프로 시저를 실행합니다. – Tom