Как настроить sp_send_dbmail для отправки результатов запроса по электронной почте?

Мне было поручено создать список ушедших пользователей, которых нам нужно заархивировать во внутреннем приложении.

Я написал оператор выбора (SQL Server 2012), и он отлично работает. Я могу получить электронное письмо для отправки от EXEC sp_send_dbmail, но в электронном письме есть только строка, которую я поместил в теле. Когда я меняю информацию @body, она по-прежнему использует исходную строку, которую я ввел. То, что я там добавил, не меняется, и я не могу заставить его отправить результаты Select.

Вот что у меня есть до сих пор:

Set @Results = 'SELECT  p.UID
            ,p.EMPNO
            ,p.FULLNAME AS FULL_NAME
            ,p.Archived
            ,p.COMPANY
            ,p.EMAIL
            ,p.SID
            ,e.TERMCODE AS TERM_CODE
            ,CONVERT(VARCHAR, e.FIREDATE, 101) AS FIRE_DATE
        FROM app_table p
        LEFT OUTER JOIN employee_table e ON e.EMPNO=p.EMPNO
        WHERE p.EMPNO IS NOT NULL
            AND p.ARCHIVED = 0
            AND e.FIREDATE IS NOT NULL
        ORDER BY e.FIREDATE DESC'

EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'SQL_Mailer',
        @recipients = '[email protected]', 
        @subject = 'Departed Users being archived',
        @body = @Results
END

Я также пытался добавить @query к sp_send_dbmail и поместить Select в @query: @query = 'Select statement above'

Что мне не хватает?


person Tracy Olsen    schedule 11.12.2018    source источник


Ответы (1)


Вы должны передать запрос в параметре @query и указать @attach_query_result_as_file=1. @body — это просто текст, который нужно включить в сообщение. См. sp_send_dbmail для более подробной информации. Вы сказали, что пытались это сделать, но не сказали, что произошло, и ваш код этого не делает.

Set @Results = 'SELECT  p.UID
        ,p.EMPNO
        ,p.FULLNAME AS FULL_NAME
        ,p.Archived
        ,p.COMPANY
        ,p.EMAIL
        ,p.SID
        ,e.TERMCODE AS TERM_CODE
        ,CONVERT(VARCHAR, e.FIREDATE, 101) AS FIRE_DATE
    FROM app_table p
    LEFT OUTER JOIN employee_table e ON e.EMPNO=p.EMPNO
    WHERE p.EMPNO IS NOT NULL
        AND p.ARCHIVED = 0
        AND e.FIREDATE IS NOT NULL
    ORDER BY e.FIREDATE DESC'

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SQL_Mailer',
    @recipients = '[email protected]', 
    @subject = 'Departed Users being archived',
    @body = 'You can write something here',
    @query = @Results,
    @attach_query_result_as_file = 1
person Andrey Nikolov    schedule 11.12.2018
comment
Спасибо @Андрей Николов. Это была моя ошибка. Я передал запрос с @query, но в то время у меня не было @attach_query_results_as_file, я думаю. Оба вместе дают мне результат, который я хочу получить по электронной почте. - person Tracy Olsen; 12.12.2018