Как преобразовать хранимые процедуры из службы 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
Включите компонент Database Mail, если он не включен. Для включения компонента используется Мастер настройки компонента Database Mail.
Создайте профиль компонента Database Mail, если созданного профиля нет. Дополнительные сведения о создании профилей компонента Database Mail см. в разделе Как создать личные профили компонента Database Mail (Transact-SQL).
Замените вызов 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 |
При обновлении процедур обратите внимание на следующие различия.
- Недоступен ввод сообщений 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
.
См. также
Основные понятия
Другие ресурсы
Хранимая процедура sp_send_dbmail (Transact-SQL)
xp_stopmail (Transact-SQL)