Vorgehensweise: Konvertieren gespeicherter Prozeduren von SQL Mail in Datenbank-E-Mail (Transact-SQL)

Mit Datenbank-E-Mail können Sie in SQL Server E-Mails senden. Verwenden Sie die gespeicherte Prozedur sp_send_dbmail, um E-Mails zu senden. Die für diese Prozedur erforderlichen Argumente sind mit den Argumenten für xp_sendmail vergleichbar. Deshalb ist das Konvertieren einer Prozedur, die xp_sendmail verwendet, in sp_send_dbmail unkompliziert.

Der wichtigste zusätzliche Parameter für sp_send_dbmail ist das optionale Mailprofil, das zum Senden der Nachricht verwendet wird. Zum Erstellen eines Datenbank-E-Mail-Profils verwenden Sie den Assistent zum Konfigurieren von Datenbank-E-Mail oder die gespeicherten Prozeduren von Datenbank-E-Mail. Nur die msdb-Datenbank kann eine Mailhost-Datenbank sein.

So konvertieren Sie eine gespeicherte Prozedur von SQL Mail in Datenbank-E-Mail

  1. Aktivieren Sie Datenbank-E-Mail, falls dies noch nicht geschehen ist. Datenbank-E-Mail aktivieren Sie mit dem Assistent zum Konfigurieren von Datenbank-E-Mail.

  2. Erstellen Sie ein Datenbank-E-Mail-Profil, falls Sie noch kein Profil erstellt haben. Weitere Informationen zum Erstellen eines Datenbank-E-Mail-Profils finden Sie unter Vorgehensweise: Erstellen von privaten Datenbank-Mailprofilen (Transact-SQL).

  3. Ersetzen Sie den Aufruf von xp_sendmail durch einen Aufruf von sp_send_dbmail. Ordnen Sie die Argumente von xp_sendmail wie in der folgenden Tabelle veranschaulicht sp_send_dbmail zu.

xp_sendmail-Argument

sp_send_dbmail-Argument

@recipients

@recipients

@message

@body

@query

@query

@attachments

@file_attachments

@copy_recipients

@copy_recipients

@blind_copy_recipients

@blind_copy_recipients

@subject

@subject

@type

N/V

@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/V

@set_user

N/V

@dbuse

@execute_query_database

  1. Beachten Sie beim Aktualisieren der Prozedur folgende Unterschiede:

    • Es sind keine MAPI-Nachrichtentypen verfügbar. Datenbank-E-Mail verwendet Extended MAPI nicht. Deshalb kann der Nachrichtentyp nicht von der gespeicherten Prozedur festgelegt werden.

    • Falls der @query-Parameter angegeben ist, werden Fehler von der Abfrage an die Sitzung zurückgegeben, die sp_send_dbmail aufgerufen hat.

    • Falls der @query-Parameter angegeben ist, wird die Abfrage als aktueller Benutzer ausgeführt. Die Abfrage kann jedoch gültige Transact-SQL-Anweisungen enthalten, wie z. B. EXECUTE AS-Anweisungen.

    • Datenbank-E-Mail unterstützt die folgenden Optionen, die in SQL Mail nicht unterstützt werden:

    sp_send_dbmail-Argument

    Beschreibung

    @profile_name

    Gibt das Mailprofil an, das für die Nachricht verwendet werden soll. Datenbank-E-Mail unterstützt mehrere Profile und mehrere Konten für jedes Profil, um die Zuverlässigkeit und Skalierbarkeit zu optimieren. @profile kann ausgelassen werden, wenn ein Standardprofil für die Mailhost-Datenbank oder für den Benutzer, der sp_send_dbmail aufruft, vorhanden ist.

    @body_format

    Gibt das Format der E-Mail-Nachricht an. Mögliche Formate sind TEXT oder HTML.

    @importance

    Gibt die Wichtigkeit der E-Mail-Nachricht an.

    @sensitivity

    Gibt die Vertraulichkeit der E-Mail-Nachricht an.

    @query_attachment_filename

    Gibt den Dateinamen an, der verwendet werden soll, wenn die Ergebnisse einer Abfrage als Datei angefügt werden. Wenn Sie xp_sendmail @query parameter mit @attach_results = TRUE verwenden, kann mit dem @attachments-Parameter nur eine Datei angegeben werden, die an die E-Mail-Nachricht angefügt werden soll. Für sp_send_dbmail steht sowohl @file_attachments als auch

    @query_attachment_filename zur Verfügung.

Beispiel

Im folgenden Beispiel wird SQL Mail verwendet, um eine Meldung an danw@Adventure-Works.com zu senden.

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

Im darauf folgenden Beispiel wird Datenbank-E-Mail sowie das Standardprofil für den aktuellen Benutzer verwendet, um dieselbe Nachricht zu senden:

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

Beachten Sie, dass die Prozedur in der msdb-Datenbank ausgeführt wird.