Немного изменённый код. Встроен механизм проверки, при котором сообщение не будет отсылаться чаще чем 1 раз в полчаса, чтобы сильно не спамить.
Для этого необходимо создать вспомогательную таблицу dbo.MailHistory
Код
USE
[BNComplex]GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MailHistory](
[SendDate][datetime]NOT NULL,
CONSTRAINT [PK_SendDate] PRIMARY KEY CLUSTERED
(
[SendDate]ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
[PRIMARY]) ON
[PRIMARY]GO
и единоразово туда произвести insert в поле SendDate, например:
Код
INSERT INTO [BNComplex].[dbo].
[MailHistory]([SendDate])
VALUES
(GETDATE())
GO
Необходимо это для того, чтобы было с чем сверяться.
Код
use BNComplex
declare @currentUTC datetime
declare @current datetime
declare @SendTime datetime
set @current=GETDATE()
set @currentUTC=(select dateadd(mi,-2,GETUTCDATE())) -- указываем допустимый порог в минутах минус от системного по гринвичу, после чего будет Alarm - 2 минуты
set @SendTime=(select SendDate from dbo.MailHistory)
declare @maxnavtime datetime
set @maxnavtime=(select MAX (NavTime) from ObjectsCoords)
if @maxnavtime <=@currentUTC
and DATEDIFF (mi,@SendTime, @current) >30 -- здесь как раз мы задаём условие что письмо повторно отправляется только по истечении 30-ти минут с момента отправки предыдущего
BEGiN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'srvt',
@recipients = '[u]my_mail@mail.ru; [url=mailto:my_mail2@mail.ru]my_mail2@mail.ru ', --указываем список адресов рассылки
@body = 'Отсутствие новых данных от приборов!!!'
update MailHistory set SendDate=GETDATE() --запишем новое время отправки последнего e-mail
END
else print 'good'