2013-10-24 2 views
2

У меня были триггеры в моей базе данных, которые использовали cursors/sp_send_dbmail для отправки по электронной почте, когда были обновлены некоторые столбцы. Мне сказали, что это не лучшая практика, поэтому я создал новую таблицу под названием «EmailNotify», которая содержит столбцы, такие как приемник, субъект, тело и т. Д. Поэтому вместо этого триггеры теперь вставляют в эту таблицу электронное письмо, которое я хочу отправить.Задание агента, которое отправляет сообщения электронной почты из пользовательской таблицы электронной почты

Я хочу создать задание, которое выполняется каждые несколько минут, которое проверяет эту таблицу и электронные письма. Пункт ниже - это то, что я придумал, но можно ли использовать курсоры в этом случае? Должна ли таблица включать отправленное поле, чтобы я знал, какие строки я отправил? Могу ли я изменить это внутри курсора? Или было бы целесообразно усечь стол после этого?

DECLARE @emailSubject AS NVARCHAR(100); 
DECLARE @emailRecipients AS NVARCHAR(100); 
DECLARE @emailBody AS NVARCHAR(max); 

DECLARE cur CURSOR LOCAL READ_ONLY FAST_FORWARD FOR 
    SELECT 
     recipients, 
     subject, 
     body 
    FROM 
     EmailNotify; 

OPEN cur 

FETCH NEXT FROM cur INTO 
    @emailRecipients, 
    @emailSubject, 
    @emailBody 

WHILE @@FETCH_STATUS = 0 
BEGIN 

     EXEC msdb.dbo.sp_send_dbmail 
       @profile_name = 'name', 
       @recipients = @emailRecipients, 
       @body = @emailBody, 
       @body_format = 'HTML', 
       @subject = @emailSubject; 

     FETCH NEXT FROM cur INTO 
      @emailRecipients, 
      @emailSubject, 
      @emailBody 
END 

CLOSE cur 
DEALLOCATE cur 

ответ

2

Я

  1. Добавить EmailSent(DATETIME) = NULL столбец в таблицу
  2. Создать EmailSent переменные в верхней части вашего прока и установить его на GETDATE()
  3. UPDATE <YOURTABLE> SET EmailSent = @EmailSent WHERE EmailSent IS NULL
  4. Добавить WHERE EmailSent = @EmailSent на ваш запрос по электронной почте

Вы можете выполнить это с помощью отчета SSRS с подпиской или подпиской, привязанной к данным, вместо этого задания, но это действительно вопрос предпочтений. Форматирование проще в SSRS, иначе вы будете возиться с динамическим HTML в своем теле сообщения. Был там, не приятный.

+1

Если вам нравятся такие вопросы/ответы, то я готов поспорить, вам понравится [CodeReview] (http://codereview.stackexchange.com/help/on-topic) :) –

Смежные вопросы