Как я могу установить 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 = 'my.address@myemail.com', 
        @subject = 'Departed Users being archived',
        @body = @Results
END

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

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

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 = 'my.address@myemail.com', 
    @subject = 'Departed Users being archived',
    @body = 'You can write something here',
    @query = @Results,
    @attach_query_result_as_file = 1
Другие вопросы по тегам