2017-11-23 5 views
0

다음 코드는 sp_send_dbmail 함수를 통해 SQL 쿼리를 기반으로 2 개의 다른 테이블을 전송합니다. catch는 두 테이블 모두 결과를 반환하면 아무 문제없이 전자 메일을 완벽하게 표시합니다. . 테이블 중 하나에 NO 결과가 있으면 이메일이 완전히 비어 있습니다.하나의 테이블에 결과가없는 경우 SQL HTML 전자 메일이 표시됩니다.

어떻게 해결할 수 있습니까?

감사

declare @tableHTML NVARCHAR(MAX); 


set @tableHTML = N'Este foi o resultado de Faturas Emitidas: <br><br><table border ="1">' + 
N'<tr><th>Documento</th></tr>' + 
cast ((select td = cc.tx 
       from cc 
for xml path ('tr'),type) as nvarchar(max)) + 

N' </table><table border ="1"><tr><th>Valor Total Vencido</th></tr>' 
+ 
cast ((select td = fx.tc 
         from fx 
    for xml path ('tr'),type) as nvarchar(max)) + 
    N'</table>'; 

EXEC sp_send_dbmail 
     @profile_name ='xx_SqlMail', 
     @recipients ='[email protected]', 
     @subject ='Resumo', 
     @body [email protected], 
     @body_format='HTML'; 

답변

1

내가 쿼리의 일부는 NULL 값을 반환 의심 것이다. 모든 값을 NULL과 연결하면 항상 NULL이됩니다.

SELECT 'A'+ NULL + 'B'는 NULL을 반환합니다.

여러 연결을 수행 할 때 어떤 값이 NULL이면 @tableHTML이 NULL이됨을 의미합니다. ISNULL()에 선택 물을 래핑 해보십시오.

선택 ISNULL (TD, '') = cc.tx ...

+0

당신의 도움을 주셔서 감사합니다,하지만 난 ISNULL으로 모든 선택 필드를 포장 한 후 같은 문제를 얻을이 내가 정말 생각하기 때문에 매우 이상하다 대답이 문제를 해결할 것입니다 –

+0

EXEC sp_send_dbmail 대신 PRINT @tableHTML을 넣어서 변수에 반환되는 것을 볼 수 있습니까? – codemac