2013-03-04 7 views
8

Ich arbeite an ETL und ich habe dies unter SQL-Code in meiner SQL-Aufgabe im SSIS-Paket. So habe ich codiert. Ich wähle Daten aus einer Tabelle und das Ergebnis dieser Abfrage als Datei aus. Ich möchte, dass dieser Anhang im CSV-Format gesendet wird. Wie mache ich es?Wie wird ein Abfrageergebnis im CSV-Format gesendet?

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 

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

+0

Wenn Sie SSIS verwenden, dann Warum verwenden Sie nicht die Funktionen von SSIS, um eine CSV-Datei zu erstellen, und die 'Send Mail Task', um die E-Mail zu senden? – JodyT

+0

Basierend auf Anforderung. Dies ist die einzige Möglichkeit, dies zu tun – ETLUser

+0

Ich fügte eine Antwort unten, die das Abfrageergebnis als CSV formatieren sollte und einige weitere Informationen über die sp_send_dbmail SP hinzugefügt. Könnten Sie die Antwort akzeptieren, wenn das für Sie funktioniert? – JodyT

Antwort

25

Hinzufügen @query_result_separator sollte den Trick tun.

Hinzufügen @query_result_no_padding = 1 könnte die Ergebnisse ein wenig aufräumen. Alle aus können die Argumente here

+0

Hey Danke :-) Ich habe bekommen was ich gesucht habe. Danke vielmals. – ETLUser

+0

Die Zeile mit @ attach_query_result_as_file = 1 benötigt am Ende ein Komma, sonst gibt der Code einen Fehler aus. –

+0

@dev_etter: Behoben :) –

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

Gute Idee über NOCOUNT in der @ Query-Definition. +1 – smoore4

4

Hinzufügen

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

mit Ergebnis gefunden werden, um das Problem gelöst

Siehe Source

0

This comment on purple frog zeigt Sie können auch die Tab-Zeichen als Trennzeichen verwenden .

sieht auch wie diese Antwort ist bereits gebucht, mein schlecht: https://stackoverflow.com/a/44315682/5758637

(Kopieren und Einfügen bei dem lila Frosch Link geht in Zukunft tot):

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 
Verwandte Themen