获取重复的数据并发送SQL邮件

时间:2018-11-08 22:08:12

标签: sql sql-server

早上好,我有一个名为Ticket的表,其中已注册了几张票,每张都有一个状态:

1 =已接受,2 =已分配,3 =正在关注,4 =已出席,5 =同意。

我想执行一个存储过程,在该过程中,我仅向状态4的票证发送邮件,也就是说,我的票证的状态为4,exec sp_sendmail .处于激活状态

然后,我将每隔30分钟将其用作作业,检查它是否仍处于该状态,如果它处于状态4,它将再次发送邮件,一旦将状态4更改为5,它将不发送任何内容,它将被关闭。

2 个答案:

答案 0 :(得分:0)

基本上,您将在工作中使用类似的内容。

exec sp_send_dbmail 
   @profile_name = 'your_mail_profile'
  ,@recipients = 'you@email.com'
  ,@subject = 'Attended'
  ,@query = 'select * from yourTable where [status] = 4'
  --,@attach_query_result_as_file = 1
  --,@query_attachment_filename = 'somefile.csv'

查看其他选项in the docs ...并进行相应的调整。

答案 1 :(得分:0)

类似这样的事情,在票证列表中循环并发送电子邮件。不过,请注意以下几点:首先,如果您尝试一次发送太多邮件,那么您的电子邮件提供商可能会开始丢弃它们,因此可能在消息之间放置{pre} WAITFOR DELAY '00:00:02'{pre}延迟。另外,您可以查看sp_send_dbmail中的查询选项,而不是为每张票发送一封电子邮件:您可以通过电子邮件发送当前所有4张票的单个列表。这取决于您的需求。

CREATE PROCEDURE dbo.SendTicketAttendedEmails 
AS
BEGIN

    DECLARE @MailList TABLE(TicketID INT, SendTo VARCHAR(255))
    DECLARE @ThisTicketID INT
        , @MailMessage NVARCHAR(2000)
        , @MailSubject NVARCHAR(255)
        , @SendTo VARCHAR(255)

    INSERT INTO @MailList
        ([TicketID], [SendTo])
    SELECT t.[ID], u.[UserEmail]
    FROM dbo.YourTicketTable t
        JOIN dbo.YourUserTable u
            ON t.UserCreated = u.ID
    WHERE [StatusID] = 4

    WHILE EXISTS(SELECT 1 FROM @MailList)
    BEGIN

        SELECT TOP(1) @ThisTicketID = [TicketID]
            , @MailSubject = 'Ticket ' + CAST([TicketID] AS VARCHAR(10)) + ' is in status 4.'
            , @MailMessage = 'Please review, or whatever, ticket ' + CAST([TicketID] AS VARCHAR(10)) + '.'
            , @SendTo =  COALESCE([SendTo], 'yourEmailAddress@InCase.Missing')
        FROM @MailList
        ORDER BY [TicketID];

        DECLARE @mailitem_id INT ;
        EXEC [msdb].dbo.[sp_send_dbmail] 
            @profile_name = 'SomeDBMailProfileName'     -- sysname
            , @recipients = @SendTo                     -- varchar(max)
            , @subject = @MailSubject                   -- nvarchar(255)
            , @body = @MailMessage                      -- nvarchar(max)
            , @mailitem_id = @mailitem_id OUTPUT        -- int
            , @from_address = 'you@you.com'             -- varchar(max)
            , @reply_to = 'you@you.com'                 -- varchar(max)

        DELETE @MailList
        WHERE [TicketID] = @ThisTicketID

    END
END