2013-03-04 13 views
8

Pracuję nad ETL i mam to poniżej kodu sql w moim zadaniu SQL w pakiecie SSIS. Tak właśnie zakodowałem. Wybieram dane z tabeli i wynik tego zapytania jako plik. Chcę, aby ten załącznik został wysłany w formacie CSV. Jak mam to zrobić?Jak wysłać wynik zapytania w formacie 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 

Każda pomoc będzie bardzo doceniana. Z góry dziękuję.

+0

Jeśli używasz SSIS następnie dlaczego nie skorzystać z funkcji SSIS, aby utworzyć plik CSV i "Wyślij zadanie pocztowe", aby wysłać wiadomość e-mail? – JodyT

+0

Na podstawie wymagania. Jest to jedyny sposób, aby to zrobić. – ETLUser

+0

Dodałem odpowiedź poniżej, która powinna sformatować wynik zapytania jako plik CSV i dodać trochę więcej informacji o SP_send_dbmail SP. Czy możesz zaakceptować odpowiedź, jeśli ci to pomoże? – JodyT

Odpowiedz

25

Dodanie @query_result_separator powinno załatwić sprawę.

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 = ',' 

Dodanie @query_result_no_padding = 1 może nieco poprawić wyniki. Wszystko off argumentów można znaleźć here

+0

Hej Dzięki :-) Dostałem to, czego szukałem. Wielkie dzięki. – ETLUser

+0

Linia z @ attach_query_result_as_file = 1 wymaga przecinka na końcu, w przeciwnym razie kod zgłasza błąd. –

+0

@dev_etter: Naprawiono :) –

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

Dobre pojęcie o NOCOUNT w definicji @query. +1 – smoore4

4

Dodawanie

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

z wyniku rozwiązano kwestię

Zobacz Source

0

This comment on purple frog wskazuje, można również użyć znaku tabulacji jako ogranicznik .

również wygląda ta odpowiedź został już opublikowany, mój zły: https://stackoverflow.com/a/44315682/5758637

(kopiowanie i wklejanie w przypadku fioletowy Link żaba idzie martwy w przyszłości):

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 
Powiązane problemy