首页 > 解决方案 > SQL Mail 仅向查询中指定的用户发送电子邮件

问题描述

我有大约 1 个月的 SQL 经验,我想根据查询条件向客户发送电子邮件。我面临的挑战是电子邮件应该只发送给查询中显示的用户电子邮件。下面是一个数据示例。我不知道我应该怎么做才能根据查询设置自动电子邮件。任何帮助是极大的赞赏!

我的查询看起来像这样,

select *
from [Tbl]
where [Date Certificate is Expiring] 
Between getdate()-372 AND getdate()-371

输出:

用户名 | 电子邮件 | 日期证书到期

注意:我无权访问 Visual Basic、SSRS、SSIS 或数据库引擎和 dbMail 以外的任何其他工具

标签: sqltsqlsql-server-2016

解决方案


请先创建 DB 邮件配置文件,然后将其放入以下查询:

DECLARE @MailRecipients NVARCHAR(MAX);
SELECT @MailRecipients = STUFF((
    SELECT DISTINCT ';' + t.Email 
    FROM [Tbl] t 
    WHERE t.[Date Certificate is Expiring] BETWEEN GETDATE()-372 AND GETDATE()-371 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'),1,1,'')
;

IF COALESCE(@MailRecipients,'') <> ''
BEGIN
    EXEC msdb.dbo.sp_send_dbmail
            @profile_name = ..., -- <-- you have to create DBMailProfile first
            @recipients = @MailRecipients,
            @subject = 'Email about expiring stuff',
            @body_format = 'HTML',
            @body = 'Hi there, your something is expired',
            @importance = 'Normal' 
END

推荐阅读