Как организовать периодическую отправку на почту отчета по ошибкам

Общая схема работы: 

  1. Запускаем периодический запрос через механизм sync 
  2. Процедура генерирует разметку
  3. Если разметка не пустая, то отправляем на почту через внешнее действие внутри sync.

Процедура генерации разметки: 

CREATE OR ALTER PROCEDURE [dbo].[as_exception_diag]
	@limit int =20,
	@s nvarchar(max) OUTPUT
AS
BEGIN

declare @t1 table (title nvarchar(max), db nvarchar(256), [desc] nvarchar(max),
	digit nvarchar(512), important int)
declare @s1 nvarchar(max)=''

declare @week int =  isnull((select count(*) from as_trace t3 where t3.code='exception' and cast(created as date) > cast(dateadd(day, -7, getdate()) as date) ), 0)
declare @yesterday int = isnull((select count(*) from as_trace t3 where t3.code='exception' and cast(created as date) = cast(dateadd(day, -1, getdate()) as date) ), 0)
declare @today int = isnull((select count(*) from as_trace t2 where t2.code='exception' and cast(created as date) = cast(getdate() as date) ), 0)
declare @lastHour int = isnull((select count(*) from as_trace t2 where t2.code='exception' and created >  dateadd(hour, -1, getdate()) ), 0)

set @s1 = @s1 + 'week - '  + cast(@week as nvarchar) + '
'
set @s1 = @s1 + 'yesterday - '  + cast(@yesterday as nvarchar) + '
'
set @s1 = @s1 + 'today - '  + cast(@today as nvarchar) + '
'
set @s1 = @s1 + 'lastHour - '  + cast(@lastHour as nvarchar) + '
'

if(@yesterday>@limit) begin

	set @s = @s+ @s1

	declare @s2 nvarchar(max)
	select @s2= STUFF((
		select '

' + username + ' ' + convert(nvarchar(128), created, 104) + ' - ' + header+ '

' +
			'
' + replace(text, '
', '
') + '
' from (
			select top 30 username, created, text, header from as_trace where code='exception' order by id desc
	) t1
	--order by db, title desc
	FOR XML PATH, TYPE).value('.[1]','nvarchar(max)' ), 1, 1, '')
	set @s = @s+ @s2
end

END;

' + username + ' ' + convert(nvarchar(128), created, 104) + ' - ' + header+ '

' +
			'

' + text + '

' from (
			select top 30 username, created, text, header from as_trace where code='exception' order by id desc
	) t1
	--order by db, title desc
	FOR XML PATH, TYPE).value('.[1]','nvarchar(max)' ), 1, 1, '')
	set @s = @s+ @s2
end

END;

@limit задает минимальное количество исключений за вчера, при котором должно отправляться письмо на почту.

Процедура sync_day с отправкой сообщений об ошибках: 

CREATE PROCEDURE [dbo].[falcon_nt_sync_day]
AS
BEGIN
    declare @s nvarchar(max) = ''
	exec [as_exception_diag] @limit = 20, @s=@s OUTPUT
	if(len(@s)>0) begin
        	select 'email' type, 'mail@site.ru' [to], 'Ошибки на site.ru' subject, @s body
    end
END

Falcon Space - функциальная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Веб-приложения на MS SQL. Партнерская программа для разработчиков и веб-студий

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.
Смотреть примеры с кодом SQL
Документация по платформе

Google поиск по нашей документации