You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中满足指定查询条件时向对应用户发送邮件通知

在SQL Server中实现条件触发邮件通知的方案

前提准备

首先得确保你的SQL Server已经配置好Database Mail,这是发送邮件的基础。如果还没配置,你可以通过SSMS的“管理”->“Database Mail”向导完成配置,或者调用系统存储过程(比如sysmail_add_account_sp、sysmail_add_profile_sp)创建邮件账户和配置文件。

核心实现逻辑

我们可以编写一个存储过程,先检查两个查询是否存在符合条件的数据,一旦有匹配结果就触发对应邮件的发送。另外注意你提供的SQL语句里最后一个引号是中文全角格式,要改成英文半角引号,避免语法错误。

具体代码示例

CREATE PROCEDURE dbo.SendConditionalEmails
AS
BEGIN
    SET NOCOUNT ON;

    -- 定义变量存储查询结果行数
    DECLARE @Count1 INT, @Count2 INT;

    -- 检查第一个条件的结果数量
    SELECT @Count1 = COUNT(*)
    FROM dbo.masterdevicereference
    WHERE Generation_UDD03 LIKE '%dummy%'
      AND Generation_UDD01 NOT LIKE '%dummy%'; -- 修正原语句的中文引号为英文

    -- 存在符合条件的数据时,给user1发送邮件
    IF @Count1 > 0
    BEGIN
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = '你的Database Mail配置文件名', -- 替换为实际配置文件名
            @recipients = 'user1@example.com', -- 替换为user1的真实邮箱
            @subject = '[通知] 符合条件1的设备参考数据',
            @body = '以下是符合条件的设备参考数据:' + CHAR(13) + CHAR(10),
            @query = 'SELECT AStockReference, Generation_UDD03, Generation_UDD01 FROM dbo.masterdevicereference WHERE Generation_UDD03 LIKE ''%dummy%'' AND Generation_UDD01 NOT LIKE ''%dummy%''',
            @query_result_header = 1,
            @query_result_separator = ',',
            @query_result_width = 32767;
    END

    -- 检查第二个条件的结果数量
    SELECT @Count2 = COUNT(*)
    FROM dbo.masterdevicereference
    WHERE Generation_UDD01 LIKE '%dummy%'
      AND Generation_UDD03 NOT LIKE '%dummy%'; -- 修正引号格式

    -- 存在符合条件的数据时,给user2发送邮件
    IF @Count2 > 0
    BEGIN
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = '你的Database Mail配置文件名', -- 替换为实际配置文件名
            @recipients = 'user2@example.com', -- 替换为user2的真实邮箱
            @subject = '[通知] 符合条件2的设备参考数据',
            @body = '以下是符合条件的设备参考数据:' + CHAR(13) + CHAR(10),
            @query = 'SELECT AStockReference, Generation_UDD03, GenerationID_UDD03, Generation_UDD01, GenerationID_UDD01 FROM dbo.masterdevicereference WHERE Generation_UDD01 LIKE ''%dummy%'' AND Generation_UDD03 NOT LIKE ''%dummy%''',
            @query_result_header = 1,
            @query_result_separator = ',',
            @query_result_width = 32767;
    END
END
GO

定时自动执行(可选)

如果需要定期检查数据并发送邮件,可创建SQL Server Agent作业:

  • 新建作业,添加一个“Transact-SQL脚本(T-SQL)”类型的步骤
  • 在脚本中调用存储过程:EXEC dbo.SendConditionalEmails;
  • 设置作业执行计划(比如每日、每周固定时间)

注意事项

  • 确保执行存储过程的账号拥有msdb.dbo.sp_send_dbmail的执行权限,以及访问dbo.masterdevicereference表的权限
  • 替换代码中的邮箱地址、Database Mail配置文件名为实际值
  • 若需要HTML格式的邮件正文,可修改@body参数,用FOR XML PATH方式将查询结果转为HTML表格

内容的提问来源于stack exchange,提问作者adarsh saurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:18:40