Как я могу использовать sp_send_dbmail для отправки нескольких запросов? - PullRequest
5 голосов
/ 26 января 2011

Я пытаюсь отправить электронное письмо, используя sp_send_dbmail.Мне нужно, чтобы один запрос отправлялся как вложение, а другой - как часть письма.Проблема в том, что sp_send_dbmail имеет только один параметр @query, и я не вижу способа добавить еще один.

Есть ли способ либо: a) добавить второй запрос (со всемипараметры, прикрепленные к нему) или б) выполнить запрос в переменную и затем добавить это в тело моего письма?

Я использую sql-сервер 2005.

TIA!

1 Ответ

5 голосов
/ 27 января 2011

Используйте параметр @query хранимой процедуры msdb.dbo.sp_send_dbmail для вложения и используйте параметр @body с переменной, содержащей результат другого запроса.

В приведенном ниже примере кода создаетсястрока из истории шагов задания SQL Server, содержащая элементы таблицы HTML, используемые для отправки электронного письма с использованием хранимой процедуры msdb.dbo.sp_send_dbmail.Вы должны быть в состоянии адаптировать его для ваших целей.

DECLARE @cat        varchar(MAX),
        @email_id   int


SELECT @cat = COALESCE(@cat + '', '')
                + '<tr><td>'
                + j.[name] + '</td><td>'
                + CAST(js.step_id AS varchar) + '</td><td>'
                + js.step_name + '</td><td>'
                + CONVERT(char(23), jsl.date_created, 121) + '</td><td>'
                + jsl.[log] + '</td></tr>'
FROM    msdb.dbo.sysjobstepslogs jsl
        JOIN msdb.dbo.sysjobsteps js ON jsl.step_uid = js.step_uid
        JOIN msdb.dbo.sysjobs j ON js.job_id = j.job_id


SET @cat = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<style type="text/css">
    td {
        border: 1pt dotted #ddd;
    }

    #log_text {
        width: 20em;
    }
</style>
</head>
<body>
<table>
<colgroup>
    <col />
    <col />
    <col />
    <col />
    <col id="log_text" />
</colgroup>
<thead>
<tr>
<th>Job</th><th>Step</th><th>Step name</th><th>Log created</th><th>Log text</th></tr>
</thead>
<tbody>
        ' + @cat + '
</tbody>
</table>
</body>
</html>'


EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'SQLServerDatabaseMailProfile',
    @recipients = 'person@example.com',
    @subject = 'SQL Server Database Mail · Job step logs',
    @body = @cat,
    @body_format = 'HTML',
    @mailitem_id = @email_id OUTPUT
...