Поделиться через


Как преобразовать хранимые процедуры из службы SQL Mail в компонент Database Mail (Transact-SQL)

Компонент Database Mail позволяет отправлять электронную почту из Microsoft SQL Server 2005. Для отправки электронной почты используется хранимая процедура sp_send_dbmail. Аргументы, которые требуются этой процедуре, похожи на аргументы процедуры xp_sendmail. Поэтому в хранимых процедурах легко перейти от xp_sendmail к sp_send_dbmail.

Наиболее важным дополнительным параметром процедуры sp_send_dbmail является необязательный почтовый профиль, предназначенный для отправки сообщения. Профиль компонента Database Mail можно создать при помощи мастера Мастер настройки компонента Database Mail или хранимых процедур компонента Database Mail. Базой данных обслуживания почты может быть только msdb.

Преобразование хранимой процедуры из службы SQL Mail в компонент Database Mail

  1. Включите компонент Database Mail, если он не включен. Для включения компонента используется Мастер настройки компонента Database Mail.

  2. Создайте профиль компонента Database Mail, если созданного профиля нет. Дополнительные сведения о создании профилей компонента Database Mail см. в разделе Как создать личные профили компонента Database Mail (Transact-SQL).

  3. Замените вызов xp_sendmail на sp_send_dbmail. Сопоставьте аргументы процедуры xp_sendmail с sp_send_dbmail, как показано в следующей таблице.

Аргумент xp_sendmail Аргумент sp_send_dbmail

@recipients

@recipients

@message

@body

@query

@query

@attachments

@file_attachments,

@query_attachment_filename

@copy_recipients

@copy_recipients

@blind_copy_recipients

@blind_copy_recipients

@subject

@subject

@type

недоступно

@attach_results

@attach_query_result_as_file

@no_output

@exclude_query_output

@no_header

@query_result_header

@width

@query_result_width

@separator

@query_result_separator

@echo_error

недоступно

@set_user

н/д

@dbuse

@execute_query_database

  1. При обновлении процедур обратите внимание на следующие различия.

    • Недоступен ввод сообщений MAPI. Поскольку компонент Database Mail не использует Extended MAPI, хранимая процедура не может установить тип сообщения.
    • Если указан параметр @query, то любые ошибки запроса возвращаются в сеанс, который вызвал процедуру sp_send_dbmail.
    • Если указан параметр @query, то запрос выполняется под учетной записью текущего пользователя. Однако запрос может содержать любые допустимые инструкции языка Transact-SQL, включая EXECUTE AS.
    • Компонент Database Mail поддерживает следующие параметры, которые не поддерживаются в службе SQL Mail:
    Аргумент sp_send_dbmail Описание

    @profile_name

    Почтовый профиль, используемый для сообщения. Компонент Database Mail поддерживает несколько профилей и несколько учетных записей для каждого профиля, обеспечивая повышенную надежность и масштабируемость. Аргумент @profile_name можно опустить, если задан профиль по умолчанию для базы данных обслуживания почты или для пользователя, вызывающего процедуру sp_send_dbmail.

    @body_format

    Формат сообщения электронной почты: TEXT или HTML.

    @importance

    Важность сообщения электронной почты.

    @sensitivity

    Чувствительность сообщения электронной почты.

    @query_attachment_filename

    Имя файла, который используется, когда результаты запроса прикрепляется к сообщению в виде файла. Если используется параметр xp_sendmail @query parameter с параметром @attach_results= TRUE, то параметр @attachments может указывать только один прикрепленный файл к электронному сообщению. Хранимая процедура sp_send_dbmail имеет как @file_attachments, так и @query_attachment_filename.

Пример

В следующем примере служба SQL Mail используется для отправки сообщения danw@Adventure-Works.com.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @message=N'The master database is full.' ;

В следующем примере для отправки одного и того же сообщения используется компонент Database Mail и профиль по умолчанию текущего пользователя:

EXEC msdb.dbo.sp_send_dbmail
    @recipients=N'danw@Adventure-Works.com',
    @body=N'The master database is full.' ;

Обратите внимание, что процедура запускается в базе данных msdb.

См. также

Основные понятия

Компонент Database Mail

Другие ресурсы

Хранимая процедура sp_send_dbmail (Transact-SQL)
xp_stopmail (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005