2016-12-14 67 views
0

我有一个查询将查看将查看我的SQL环境中的数据库并将结果发送到一个电子邮件地址。问题不在电子邮件的正文中显示。我使用下面的查询来获取磁盘空间使用情况:SQL Server报告电子邮件没有显示电子邮件正文中的任何内容

create table #DriveSpaceLeft (Drive varchar(10), 
            [MB Free] bigint) 

insert #DriveSpaceLeft (Drive, [MB Free]) 
    EXEC master.dbo.xp_fixeddrives; 

create table DrivesWithIssue (Drive varchar(10), 
           [MB Free] bigint) 

insert into DrivesWithIssue 
    select Drive, [MB Free] from #DriveSpaceLeft 
    where [MB Free] < 1000 

drop table #DriveSpaceLeft 

declare @cnt int 
select @cnt=COUNT(1) from DrivesWithIssue 
if (@cnt > 0) 
begin 

    declare @strsubject varchar(100) 
    select @strsubject='Check drive space on ' + @@SERVERNAME 

    declare @tableHTML nvarchar(max); 
    set @tableHTML = 
     N'<H1>Drives with less that 1GB Free - ' + @@SERVERNAME + '</H1>' + 
     N'<table border="1">' + 
     N'<tr><th>Drive</th>' + 
     N'<th>MB Free</th></tr>' + 
     CAST ((SELECT td = [Drive], '', 
         td = [MB Free] 
        FROM DrivesWithIssue 
        FOR XML PATH('tr'), TYPE 
     ) AS NVARCHAR(MAX)) + 
     N'</table>' ; 

    EXEC msdb.dbo.sp_send_dbmail 
    @from_address='[email protected]', 
    @recipients='[email protected]', 
    @subject = @strsubject, 
    @body = @tableHTML, 
    @body_format = 'HTML' , 
    @profile_name='test profile' 
end 

drop table DrivesWithIssue 

那么这一步送出电子邮件:

declare @strsubject varchar(100) 
select @strsubject='SQL check completed on ' + @@SERVERNAME 

EXEC msdb.dbo.sp_send_dbmail 
@from_address='[email protected]', 
@recipients='[email protected]', 
@subject = @strsubject, 
@body_format = 'HTML', 
@profile_name='test' 
+0

可能是,你只是错过了你的变量'@ body'? – Shnugo

+0

Btw:[This answer](http://stackoverflow.com/a/39487565/5089204)显示了一个完全通用的方法来直接从您的语句创建'html'表... XML或HTML通过字符串连接是总是 - 呃 - 丑陋的(至少很呃)... – Shnugo

回答

0

如果你能得到的电子邮件,那么就意味着是没有问题的数据库邮件设置。而您在电子邮件正文中没有看到任何内容,那么您很可能会遇到一些HTML代码问题。我猜你忘了添加标题部分<html><body>和尾部'',所以你的html应该是@heading + @tableHTML + @ tail,别忘了在

之前声明这两个参数
相关问题