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

获取重复数据并发送SQL邮件,sql,sql-server,Sql,Sql Server,您好,我有一张名为Ticket的表,其中有几张已注册的票,每一张都有一个状态: 1=接受,2=分配,3=至少​​注意,4=出席,5=同意 我想执行一个存储过程,在该过程中,我只向处于状态4的票证发送邮件,也就是说,我的票证的状态为4,它被激活exec sp_sendmail. 然后,我将每30分钟将其用作一个作业,检查它是否仍处于该状态,如果它处于状态4,它将再次发送邮件,一旦它将状态4更改为5,它将不发送任何内容,并将关闭。基本上,您将在作业中使用类似的内容 exec sp_send_dbma

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

1=接受,2=分配,3=至少​​注意,4=出席,5=同意

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


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

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

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'

请参阅其他选项。。。然后进行相应的调整。

类似于这样的东西,它会在门票列表中循环并发送电子邮件。不过要注意的是:首先,如果你试图一次发送太多邮件,你的电子邮件提供商可能会开始删除它们,所以可能会在两封邮件之间设置一个{pre}等待延迟'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

如果它对我有用,只是我需要发送几个不同的电子邮件,我怎么能做到呢?票证的状态4有几个用户,您需要发送这些用户。嗨,Gustavo,我编辑了代码以显示如何指定其他用户。我不得不假设有一个用户表包含该信息,与票证表绑定。嗯!