Procédure : convertir des procédures stockées de SQL Mail vers la messagerie de base de données (Transact-SQL)

La messagerie de base de données vous permet d'envoyer du courrier électronique depuis SQL Server. Utilisez la procédure stockée sp_send_dbmail pour envoyer du courrier électronique. Les arguments requis par cette procédure sont similaires à ceux de la procédure xp_sendmail. Par conséquent, la conversion d'une procédure recourant à xp_sendmail pour qu'elle utilise sp_send_dbmail est simple.

Le paramètre supplémentaire le plus important pour sp_send_dbmail est le profil de messagerie facultatif à utiliser pour envoyer le message. Vous créez un profil de messagerie de base de données à l'aide de l'Assistant Configuration de la messagerie de base de données ou des procédures stockées de la messagerie de base de données. Seule la base de données msdb peut être une base de données hôte de messagerie.

Pour convertir une procédure stockée depuis SQL Mail vers la messagerie de base de données

  1. Activez la messagerie de base de données si elle n'est pas déjà activée. Pour activer la messagerie de base de données, utilisez l'Assistant Configuration de la messagerie de base de données.

  2. Créez un profil de messagerie de base de données si aucun profil n'a déjà été créé. Pour plus d'informations sur la création d'un profil de messagerie de base de données, consultez Procédure : créer des profils privés de messagerie de base de données (Transact-SQL).

  3. Remplacez l'appel à xp_sendmail par un appel à sp_send_dbmail. Mappez les arguments de xp_sendmail avec sp_send_dbmail, comme le montre le tableau suivant.

Argument xp_sendmail

Argument 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

Non applicable

@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

Non applicable

@set_user

Non applicable

@dbuse

@execute_query_database

  1. Lorsque vous mettez à jour la procédure, tenez compte des différences suivantes :

    • Aucune définition de type de message MAPI n'est disponible. Étant donné que la messagerie de base de données n'utilise pas l'interface MAPI étendue, la procédure stockée ne peut pas définir le type de message.

    • Si le paramètre @query est fourni, toute erreur issue de la requête est renvoyée à la session qui a appelé sp_send_dbmail.

    • Si le paramètre @query est fourni, la requête s'exécute en tant qu'utilisateur actuel. Toutefois, la requête peut contenir toute instruction Transact-SQL valide, notamment une instruction EXECUTE AS.

    • À la différence de SQL Mail, la messagerie de base de données prend en charge les options suivantes :

    Argument sp_send_dbmail

    Description

    @profile_name

    Spécifie le profil de messagerie à utiliser pour le message. La messagerie de base de données prend en charge plusieurs profils et plusieurs comptes pour chaque profil afin d'améliorer la fiabilité et l'évolutivité. L'option @profile peut être omise s'il existe un profil par défaut pour la base de données hôte de messagerie ou pour l'utilisateur appelant sp_send_dbmail.

    @body_format

    Spécifie le format du message électronique, de type TEXT ou HTML.

    @importance

    Spécifie l'importance du message électronique.

    @sensitivity

    Spécifie la sensibilité du message électronique.

    @query_attachment_filename

    Spécifie le nom de fichier à utiliser lorsque les résultats d'une requête sont joints en tant que fichier. Si vous utilisez le paramètre xp_sendmail @query parameter lorsque la valeur de @attach_results= TRUE, le paramètre @attachments ne peut spécifier qu'un seul fichier à joindre au message électronique. sp_send_dbmail possède @file_attachments et

    @query_attachment_filename.

Exemple

L'exemple suivant utilise SQL Mail pour envoyer un message à danw@Adventure-Works.com.

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

Cet autre exemple utilise la messagerie de base de données et le profil par défaut pour que l'utilisateur actuel envoie le même message.

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

Remarquez que cette procédure s'exécute dans la base de données msdb.