2013-03-04 25 views
8

Sto lavorando su ETL e ho questo sotto il codice SQL nella mia attività SQL nel pacchetto SSIS. Questo è il modo in cui ho codificato. Sto selezionando un dato da una tabella e il risultato di quella query come file. Voglio questo allegato inviato in formato CSV. Come lo faccio?Come inviare un risultato di una query in formato CSV?

EXEC sp_send_dbmail @profile_name='default', 
@recipients='[email protected]', 
@[email protected], 
@[email protected], 

@query= 'SELECT [MID],[HID],[MeC],[LC],[RowCDate] 
FROM [JBC].[dbo].[Table1] WHERE RowCDate >= GETDATE() 
', 
@attach_query_result_as_file=1 

Qualsiasi aiuto sarà molto apprezzato. Grazie in anticipo.

+0

Se si utilizza SSIS poi perché non utilizzare le funzionalità di SSIS per creare un file CSV e l'attività "Invia posta" per inviare l'e-mail? – JodyT

+0

In base al requisito. Questo è l'unico modo per farlo. – ETLUser

+0

Ho aggiunto una risposta qui sotto che dovrebbe formattare il risultato della query come CSV e aggiungere ulteriori informazioni sullo SP sp_send_dbmail. Potresti accettare la risposta se questo ha funzionato per te? – JodyT

risposta

25

L'aggiunta di @query_result_separator dovrebbe fare il trucco.

EXEC sp_send_dbmail @profile_name='default', 
@recipients='[email protected]', 
@[email protected], 
@[email protected], 

@query= 'SELECT [MID],[HID],[MeC],[LC],[RowCDate] 
FROM [JBC].[dbo].[Table1] WHERE RowCDate >= GETDATE() 
', 
@attach_query_result_as_file=1, 
@query_attachment_filename = 'Results.csv', 
@query_result_separator = ',' 

L'aggiunta di @query_result_no_padding = 1 potrebbe eliminare leggermente i risultati. Tutti fuori gli argomenti possono essere trovati here

+0

Hey Grazie :-) Ho ottenuto quello che stavo cercando. Molte grazie. – ETLUser

+0

La riga con @ attach_query_result_as_file = 1 ha bisogno di una virgola alla fine, altrimenti il ​​codice genera un errore. –

+0

@dev_etter: risolto :) –

10
@query=' 
SET NOCOUNT ON; 
select ''sep=;'' 
select ''Col1'',''Col2'',''Col3'',''Col3'' 

select CONVERT(NVARCHAR,Col1),ISNULL(Col2, ''''),Col4 
FROM ... 
SET NOCOUNT OFF; 
', 

--Additional settings 
@query_attachment_filename = '*.csv', 
@query_result_separator = ';', 
@attach_query_result_as_file = 1, 
@query_result_no_padding= 1, 
@exclude_query_output =1, 
@append_query_error = 0, 
@query_result_header =0; 
+0

Buona idea su NOCOUNT nella definizione @query. +1 – smoore4

4

Aggiunta

'[sep=,' + CHAR(13) + CHAR(10) ColumnName] 

con esito risolto il problema

Vedi Source

0

This comment on purple frog indica che è possibile utilizzare anche il carattere di tabulazione come delimitatore .

sembra anche questa risposta è stato pubblicato già, il mio male: https://stackoverflow.com/a/44315682/5758637

(Copia e incolla nel caso in cui il link rana purple si esaurisce in futuro):

DECLARE @tab char(1) = CHAR(9) 
EXEC msdb.dbo.sp_send_dbmail 
@profile_name='donotreply' 
,@recipients ='[email protected]' 
,@query= @query 
,@subject= 'xx' 
,@attach_query_result_as_file=1  
,@query_attachment_filename='xx.csv'  
,@[email protected] 
,@query_result_no_padding=1 –trim 
,@query_result_width=32767 –stop wordwrap 
Problemi correlati