У меня были триггеры в моей базе данных, которые использовали 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
Если вам нравятся такие вопросы/ответы, то я готов поспорить, вам понравится [CodeReview] (http://codereview.stackexchange.com/help/on-topic) :) –