Procedura: Conversione di stored procedure da SQL Mail a Posta elettronica database (Transact-SQL)
Posta elettronica database consente di inviare messaggi di posta elettronica da SQL Server. Utilizzare la stored procedure sp_send_dbmail per inviare posta elettronica. Gli argomenti richiesti da questa procedura sono simili agli argomenti della stored procedure xp_sendmail, pertanto risulta relativamente semplice impostare l'utilizzo di sp_send_dbmail per una procedura che utilizza xp_sendmail.
Il parametro aggiuntivo più importante per sp_send_dbmail è rappresentato dal profilo di posta facoltativo da utilizzare per inviare il messaggio. Per creare un profilo di Posta elettronica database è possibile utilizzare Configurazione guidata posta elettronica database o le stored procedure di Posta elettronica database. L'unico database che può essere un host della posta elettronica è il database msdb.
Per convertire una stored procedure da SQL Mail a Posta elettronica database
Attivare Posta elettronica database, se non è già attivato. A tale scopo, è possibile utilizzare Configurazione guidata posta elettronica database.
Creare un profilo di Posta elettronica database, se non è già stato creato. Per ulteriori informazioni sulle modalità di creazione di un profilo di Posta elettronica database, vedere Procedura: Creazione di profili privati di Posta elettronica database (Transact-SQL).
Sostituire la chiamata a xp_sendmail con una chiamata a sp_send_dbmail. Mappare gli argomenti tra xp_sendmail e sp_send_dbmail, come è illustrato nella tabella seguente.
Argomento di xp_sendmail |
Argomento di 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/D |
@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/D |
@set_user |
N/D |
@dbuse |
@execute_query_database |
Quando si aggiorna la stored procedure, tenere presenti le differenze seguenti:
Non è possibile inserire alcun messaggio MAPI. Poiché Posta elettronica database non utilizza l'interfaccia MAPI estesa, la stored procedure non è in grado di impostare il tipo di messaggio.
Se si specifica il parametro @query, gli eventuali errori generati dalla query vengono restituiti alla sessione che ha chiamato sp_send_dbmail.
Se si specifica il parametro @query, la query viene eseguita come l'utente corrente. La query può tuttavia contenere qualsiasi istruzione Transact-SQL valida, incluse le istruzioni EXECUTE AS.
Posta elettronica database Mail supporta le seguenti opzioni che non sono supportate in SQL Mail:
Argomento di sp_send_dbmail
Descrizione
@profile_name
Specifica il profilo di posta da utilizzare per il messaggio. Posta elettronica database supporta più profili e più account per ogni profilo, offrendo un maggior livello di affidabilità e scalabilità. È possibile omettere @profile se esiste un profilo predefinito per il database host della posta elettronica o per l'utente che esegue una chiamata a sp_send_dbmail.
@body_format
Specifica il formato del messaggio di posta elettronica, TEXT o HTML.
@importance
Specifica la priorità del messaggio di posta elettronica.
@sensitivity
Specifica la sensibilità del messaggio di posta elettronica.
@query_attachment_filename
Specifica il nome file da utilizzare quando i risultati di una query vengono allegati come file. Se si utilizza il parametro xp_sendmail @query parameter con @attach_results = TRUE, nel parametro @attachments è possibile specificare un solo file da allegare al messaggio di posta elettronica. sp_send_dbmail include sia @file_attachments che
@query_attachment_filename.
Esempio
Nell'esempio seguente viene utilizzato SQL Mail per inviare un messaggio a danw@Adventure-Works.com.
EXEC master.dbo.xp_sendmail
@recipients=N'danw@Adventure-Works.com',
@message=N'The master database is full.' ;
L'esempio che segue utilizza Posta elettronica database e il profilo predefinito dell'utente corrente per inviare lo stesso messaggio:
EXEC msdb.dbo.sp_send_dbmail
@recipients=N'danw@Adventure-Works.com',
@body=N'The master database is full.' ;
Si noti che la procedura viene eseguita nel database msdb.
Vedere anche