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'
可能是,你只是错过了你的变量'@ body'? – Shnugo
Btw:[This answer](http://stackoverflow.com/a/39487565/5089204)显示了一个完全通用的方法来直接从您的语句创建'html'表... XML或HTML通过字符串连接是总是 - 呃 - 丑陋的(至少很呃)... – Shnugo