Como converter procedimentos armazenados do SQL Mail para Database Mail (Transact-SQL)

O Database Mail permite enviar emails a partir do SQL Server. Use o procedimento armazenado sp_send_dbmail para enviar emails. Os argumentos exigidos por esse procedimento são semelhantes aos do xp_sendmail. Logo, converter um procedimento que usa xp_sendmail para usar sp_send_dbmail é simples e direto.

O parâmetro adicional mais importante para sp_send_dbmail é o perfil de email opcional a usar para enviar a mensagem. Crie o perfil do Database Mail usando o Assistente para Configuração do Database Mail ou os procedimentos armazenados do Database Mail. Apenas o banco de dados msdb pode ser um banco de dados host de email.

Para converter um procedimento armazenado do SQL Mail para Database Mail

  1. Habilite o Database Mail, caso ainda não esteja. Para habilitar o Database Mail, use o Assistente para Configuração do Database Mail.

  2. Crie um perfil do Database Mail, caso ainda não tenha sido criado. Para obter mais informações sobre como criar um perfil do Database Mail, consulte Como criar perfis particulares do Database Mail (Transact-SQL).

  3. Substitua a chamada de xp_sendmail por uma chamada de sp_send_dbmail. Mapeie os argumentos do xp_sendmail para sp_send_dbmail, como mostra a tabela a seguir.

Argumento do xp_sendmail

Argumento do sp_send_dbmail

@recipients

@recipients

@message

@body

@query

@query

@attachments

@file_attachments

@copy_recipients

@copy_recipients

@blind_copy_recipients

@blind_copy_recipients

@subject

@subject

@type

N/A

@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

N/A

@set_user

N/A

@dbuse

@execute_query_database

  1. Ao atualizar seu procedimento, considere as seguintes diferenças:

    • Não está disponível nenhuma digitação de mensagem de MAPI. Como o Database Mail não usa MAPI Estendida, o procedimento armazenado não pode definir o tipo de mensagem.

    • Se o parâmetro @query for fornecido, qualquer erro da consulta será retornado à sessão que chamou sp_send_dbmail.

    • Se for fornecido o parâmetro @query, a consulta será executada como o usuário atual. Porém, a consulta pode conter qualquer Transact-SQL válido, inclusive instruções EXECUTE AS.

    • O Database Mail oferece suporte às seguintes opções, que não têm suporte no SQL Mail:

    Argumento do sp_send_dbmail

    Descrição

    @profile_name

    Especifica o perfil de email a usar para a mensagem. O Database Mail oferece suporte a vários perfis e contas para cada perfil, a fim de propiciar confiabilidade e capacidade evolutiva aprimoradas. O @profile poderá ser omitido, se houver um perfil padrão para o banco de dados host de email ou para o usuário que faz a chamada sp_send_dbmail.

    @body_format

    Especifica o formato da mensagem de email: TEXT ou HTML.

    @importance

    Especifica a importância da mensagem de email.

    @sensitivity

    Especifica a confidencialidade da mensagem de email.

    @query_attachment_filename

    Especifica o nome de arquivo a ser usado quando os resultados de uma consulta forem anexados como arquivo. Se você usar o parâmetro xp_sendmail @query com @attach_results = TRUE, o parâmetro @attachments poderá especificar apenas um arquivo a ser anexado à mensagem de email. sp_send_dbmail tem ambos, @file_attachments e

    @query_attachment_filename.

Exemplo

O exemplo a seguir usa SQL Mail para enviar uma mensagem para danw@Adventure-Works.com.

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

O exemplo a seguir usa Database Mail e o perfil padrão do usuário atual para enviar a mesma mensagem:

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

Note que o procedimento é executado no banco de dados msdb.