2013-03-04 15 views
8

Tôi đang làm việc trên ETL và tôi có mã dưới đây sql trong nhiệm vụ SQL của tôi trong gói SSIS. Đây là cách tôi đã mã hóa. Tôi đang chọn một dữ liệu từ một bảng và kết quả của truy vấn đó dưới dạng tệp. Tôi muốn tệp đính kèm này được gửi ở định dạng CSV. Tôi phải làm nó như thế nào?Cách gửi kết quả truy vấn ở định dạng 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 

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn trước.

+0

Nếu bạn đang sử dụng SSIS sau đó tại sao không sử dụng các tính năng của SSIS để tạo tệp CSV và 'Gửi Mail Task' để gửi email? – JodyT

+0

Dựa trên Yêu cầu. Đây là cách duy nhất để làm điều đó – ETLUser

+0

Tôi đã thêm một câu trả lời dưới đây sẽ định dạng kết quả truy vấn dưới dạng CSV và thêm một số thông tin khác về SP sp_send_dbmail. Bạn có thể chấp nhận câu trả lời nếu điều này làm việc cho bạn? – JodyT

Trả lời

25

Thêm @query_result_separator nên thực hiện thủ thuật.

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

Thêm @query_result_no_padding = 1 có thể làm sạch kết quả một chút. Tất cả tắt các đối số có thể được tìm thấy here

+0

Xin cảm ơn :-) Tôi đã nhận được những gì tôi đang tìm kiếm. Cảm ơn rất nhiều. – ETLUser

+0

Dòng có @ attach_query_result_as_file = 1 cần dấu phẩy ở cuối, nếu không mã sẽ phát ra lỗi. –

+0

@dev_etter: Đã sửa lỗi :) –

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

Ý tưởng hay về NOCOUNT trong định nghĩa @query. +1 – smoore4

4

Thêm

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

với kết quả giải quyết các vấn đề

Xem Source

0

This comment on purple frog chỉ ra bạn cũng có thể sử dụng các ký tự tab như một delimiter .

Cũng giống như câu trả lời này là được đăng tải đã có, xấu của tôi: https://stackoverflow.com/a/44315682/5758637

(Sao chép và dán trong trường hợp liên kết ếch tím đi chết trong tương lai):

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