SQL数据库根据需求发送邮件

一、启用数据库邮件

手动启用数据库邮件功能,需执行以下脚本:

exec sp_configure 'show advanced options',1
RECONFIGURE

exec sp_configure 'Database Mail XPs',1
RECONFIGURE With Override

二、邮件服务器设置

1.邮箱启用设置-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启时有提示有授权码,记录下,后面配置需要录入

登录QQ邮箱——账户——相关设置开启即可。

其他步骤参考其他文献。

三、数据库实现操作步骤(定时作业,触发器都可以)

----1、取出异常单号,且状态不等于处理结束 SELECT * FROM dbo.ProductionExceptionManagement----

----2、根据异常单号找到最新当前节点的创建时间  SELECT * FROM dbo.ProductionExceptionHandle

----3、定时作业获取当前系统时间与最新当前节点时间进行比对

----4、如果最新异常单号的创建时间与当前定时作业获取的系统时间之差大于30分钟

----5、给指定人员发送邮件------
DECLARE @ExceptionStatusId CHAR(12)='',
        @ProductionExceptionManagementId  CHAR (12),
        @CreateDate  DATETIME='',
        @SystemDate DATETIME='',
        @SDate DATETIME='',
        @EDate DATETIME='',
        @ExceptionLocationId CHAR (12)='',
        @Overtime NVARCHAR(50)='',
        @Nextmiaoshu NVARCHAR(100)='',
        @ZWEN NVARCHAR(MAX) =''
        --------定义游标--
        DECLARE Pemid_CURSOR CURSOR LOCAL
        FOR
        SELECT ProductionExceptionManagementId FROM dbo.ProductionExceptionManagement WHERE ExceptionStatusId<>'筛选条件' 
        --AND CreateDate BETWEEN @SDate and @EDate 
        FOR READ ONLY
        OPEN Pemid_CURSOR
        FETCH NEXT FROM Pemid_CURSOR
        INTO @ProductionExceptionManagementId
        WHILE @@FETCH_STATUS=0
        BEGIN

        --SET @ExceptionLocationId='1'
         --SELECT 
   --      @ExceptionLocationId = ExceptionLocationId 
   --                         FROM ExceptionLocation Ex LEFT OUTER JOIN  dbo.ProductionExceptionManagement Pd ON Ex.FactoryId=pd.FactoryId AND Ex.SiteId=Pd.SiteId
   --                         AND EX.WorkcenterId=Pd.WorkcenterId WHERE Ex.ExceptionTypeId=Pd.ExceptionTypeId 

        SET @ExceptionStatusId=(SELECT TOP 1 StatusId  FROM dbo.ProductionExceptionHandle WHERE ProductionExceptionManagementId=@ProductionExceptionManagementId ORDER BY CreateDate desc)

        SET @CreateDate=(SELECT TOP 1 HandleTime FROM dbo.ProductionExceptionHandle WHERE ProductionExceptionManagementId=@ProductionExceptionManagementId ORDER BY CreateDate desc)

        --SET @Nextmiaoshu=(SELECT BillStatesDescription FROM dbo.BillStates WHERE BillStatesId=@ExceptionStatusId)
        SET @Nextmiaoshu='等待|故障诊断'

        SET @ZWEN=@Nextmiaoshu+'超时30分钟未处理'+@ProductionExceptionManagementId

        SET @SystemDate=GETDATE()

        SET  @Overtime=(SELECT DATEDIFF(MINUTE,@CreateDate,@SystemDate))

        IF @Overtime>30
        BEGIN
        DECLARE @mailitem_id INT;
        EXEC msdb.dbo.sp_send_dbmail @profile_name = 'mini',                -- 配置文件名
                                     @recipients = '邮箱地址1;邮箱地址2;邮箱地址3', -- 收件箱email地址-- varchar(max)
                                     --@copy_recipients = '',  -- varchar(max)
                                     --@blind_copy_recipients = '',         -- varchar(max)
                                     @subject = N'故障报单超时未处理',       -- 邮件主题-- nvarchar(255)
                                     @body = @ZWEN                        -- 邮件正文nvarchar(max)
                                     --@body_format = ''                   -- varchar(20)
                                     --@importance = '1',                    -- varchar(6)
                                     --@sensitivity = '1',                   -- varchar(12)
                                     --@file_attachments = N'1',             -- 用于发送附件填写路径nvarchar(max)
                                     --@query = N'1',                        -- 执行有效SQL语句nvarchar(max)
                                     --@execute_query_database = 'PLC',      -- sysname
                                     --@attach_query_result_as_file = 1, -- 把 @query 的执行语句所返回消息写入.doc bit
                                     --@query_attachment_filename = N'1',    -- 设置附件文件的名称和类型为doc文档,如是文本则是.txt格式nvarchar(260)
                                     --@query_result_header = 1,         -- bit
                                     --@query_result_width = 0,             -- int
                                     --@query_result_separator = '1' ,       -- char(1)
                                     --@exclude_query_output = 1,        -- bit
                                     --@append_query_error = 1,          -- bit
                                     --@query_no_truncate = 1,           -- bit
                                     --@query_result_no_padding = 1,     -- bit
                                     --@mailitem_id = @mailitem_id OUTPUT,  -- int
                                     --@from_address = '21',                  -- varchar(max)
                                     --@reply_to = '21'                       -- varchar(max)
        
        END
      --进入下一行数据--
            
        FETCH NEXT FROM PemID_cursor
        INTO @ProductionExceptionManagementId
             
        END
        ---关闭游标--------------
        CLOSE PemID_cursor
        ---释放游标------------------
        DEALLOCATE PemID_cursor

验证结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值