Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Modificare il separatore in una virgola quando si inviano i risultati delle query tramite posta elettronica in SQL Server (T-SQL)

Se hai mai utilizzato Database Mail di SQL Server per inviare via e-mail i risultati di una query, potresti aver notato che i risultati sono separati da uno spazio per impostazione predefinita.

Questo va bene se vuoi un set di risultati separato da spazi, ma cosa succede se vuoi che sia separato da virgole?

Fortunatamente puoi usare il @query_result_separator argomento per fare proprio questo. Puoi utilizzare questo argomento per specificare qualsiasi separatore (purché sia ​​un char(1) ).

Esempio

Ecco un esempio per dimostrare come cambiare il separatore in una virgola:

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @query_result_separator = ',',
    @query_result_no_padding = 1,
    @subject = 'Query results as discussed';

Risultato:

Potential candidates for an Admin job, perhaps?
ArtistId,ArtistName,ActiveFrom
--------,----------,----------
1,Iron Maiden,1975-12-25
2,AC/DC,1973-01-11
3,Allan Holdsworth,1969-01-01
4,Buddy Rich,1919-01-01
5,Devin Townsend,1993-01-01

(5 rows affected)

Nota che sto usando anche il @query_result_no_padding argomento per rimuovere qualsiasi riempimento che potrebbe essere applicato ai risultati.

Puoi anche usare @attach_query_result_as_file = 1 per allegare i risultati in un file separato, se necessario.

Un esempio usando il separatore di spazio predefinito

Se rimuovo il @query_result_separator = ',' a parte l'esempio sopra, i miei risultati sono separati dal carattere spazio predefinito.

EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Potential candidates for an Admin job, perhaps?',
    @query = 'SELECT TOP(5) * FROM Artists;',
    @execute_query_database = 'Music',
    @query_result_no_padding = 1,
    @subject = 'Query results as discussed';

Risultato:

Potential candidates for an Admin job, perhaps?
ArtistId ArtistName ActiveFrom
-------- ---------- ----------
1 Iron Maiden 1975-12-25
2 AC/DC 1973-01-11
3 Allan Holdsworth 1969-01-01
4 Buddy Rich 1919-01-01
5 Devin Townsend 1993-01-01

(5 rows affected)