SQLServer 代理發郵件需要開啟SQL Server 代理服務器,然后,在【管理】-【數據庫郵件】中,右鍵點擊配置數據庫郵件。
我用的是騰訊的企業郵箱,個人的163郵箱略微不同。下圖是相關郵件的配置
這是配置文件的配置。
配置完成之后,就把下邊語句寫成存儲過程,之后,再配置定時任務,定時執行該存儲過程,發郵件。
ALTER PROCEDURE [dbo].[LogErrorEmail] AS declare @emailcontent nvarchar(2000);--郵件內容 declare @emailsubject nvarchar(200);--郵件主題 declare @emailadress nvarchar(100);--郵件發送地址 declare @error int; --錯誤數 declare @logfield nvarchar(max); --日志字段內容 declare @num int; --數據行數 set @error=0; set @emailcontent='日期:'+convert(varchar(10),getdate(),120)+'<br>'; --tt1_log表檢查 select @num=COUNT(*) from tt1_log where DATEDIFF(DD,t1_log.LOGDATE,getdate())<2 if(@num=2) begin select @logfield=LOG_FIELD from t1_log where DATEDIFF(DD,t1_log.LOGDATE,getdate())=0 --今天的數據 if(@logfield like '%error%') begin set @emailcontent=@emailcontent+'t1_log今天有錯;' ; set @error=@error+1; end select @logfield=LOG_FIELD from t1_log where DATEDIFF(DD,t1_log.LOGDATE,getdate())=1 --昨天的數據 if(@logfield like '%error%') begin set @emailcontent=@emailcontent+'t1_log昨天有錯;' ; set @error=@error+1; end end else begin set @emailcontent=@emailcontent+'t1_log表數據不足兩條;'; set @error=@error+1; end --t2_log表檢查 select @num= COUNT(*) from t2_log where DATEDIFF(DD,t2_log.LOGDATE,getdate())<2 if(@num=2) begin select @logfield=LOG_FIELD from t2_log where DATEDIFF(DD,t2_log.LOGDATE,getdate())=0 --今天的數據 if(@logfield like '%error%') begin set @emailcontent=@emailcontent+'t2_log今天有錯;' ; set @error=@error+1; end select @logfield=LOG_FIELD from t2_log where DATEDIFF(DD,t2_log.LOGDATE,getdate())=1 --昨天的數據 if(@logfield like '%error%') begin set @emailcontent=@emailcontent+'t2_log昨天有錯;' ; set @error=@error+1; end end else begin set @emailcontent=@emailcontent+'t2_log表數據不足兩條;'; set @error=@error+1; end if(@error>0) begin exec msdb.dbo.sp_send_dbmail @profile_name ='LogErrorEmail',--配置文件名稱 @recipients='56789023@qq.com',--收件email地址 @subject=@emailsubject,--郵件主題 @body=@emailcontent, --郵件正文內容 @body_format='html' --郵件內容格式 end