Иногда результат запроса нужно регулярно отправлять по почте: отчёт, выгрузку, результат проверки. В SQL Server для этого есть процедура msdb.dbo.sp_send_dbmail, которую можно вызывать вручную или из задания SQL Server Agent по расписанию.
Что нужно заранее
На сервере должна быть настроена компонента Database Mail и создан почтовый профиль. В примере он называется Mail. Учётной записи, от которой выполняется задание, нужна роль DatabaseMailUserRole в базе msdb.
Отправка результата процедуры файлом
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Mail',
@recipients = 'email@domain.ru',
@subject = 'Mail Subject',
@execute_query_database = 'database_name',
@query = 'EXEC procedure_name',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'values.txt'
@profile_name— профиль Database Mail.@recipients— получатели, несколько адресов через точку с запятой.@execute_query_database— база, в которой выполнится запрос.@query— сам запрос или вызов процедуры.@attach_query_result_as_file = 1— результат придёт вложением. Если поставить 0, он окажется в тексте письма.@query_attachment_filename— имя файла вложения.
Если письмо не пришло
Ошибки отправки записываются в журнал Database Mail:
SELECT * FROM msdb.dbo.sysmail_event_log ORDER BY log_date DESC;