SQLServer 存儲過程+定時任務發郵件


 

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
 
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM