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
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.
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).
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 |
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.
Siehe auch