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

  1. Attivare Posta elettronica database, se non è già attivato. A tale scopo, è possibile utilizzare Configurazione guidata posta elettronica database.

  2. 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).

  3. 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

  1. 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.