Как я могу установить sp_send_dbmail для отправки результатов запроса по электронной почте? - PullRequest
0 голосов
/ 11 декабря 2018

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

Я написал оператор выбора (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 Ответ

0 голосов
/ 11 декабря 2018

Вы должны передать запрос в параметре @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
...