如何以CSV格式发送查询结果?

时间:2013-03-04 19:34:40

标签: sql ssis

我正在研究ETL,我在SSIS包中的SQL任务中有以下sql代码。这就是我编码的方式。我正在从表中选择一个数据,并将该查询的结果作为文件。我希望以CSV格式发送此附件。我该怎么做?

EXEC sp_send_dbmail @profile_name='default',
@recipients='dev@null.com',
@subject=@SUB,
@body=@BODY,

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

任何帮助将非常感谢。提前致谢。

5 个答案:

答案 0 :(得分:33)

添加@query_result_separator应该可以解决问题。

EXEC sp_send_dbmail @profile_name='default',
@recipients='dev@null.com',
@subject=@SUB,
@body=@BODY,

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

添加@query_result_no_padding = 1可能会稍微清理一下结果。所有论点都可以找到here

答案 1 :(得分:12)

@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;

答案 2 :(得分:6)

添加

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

结果解决了问题

请参阅Source

答案 3 :(得分:1)

This comment on purple frog表示您也可以使用制表符作为分隔符。

看起来这个答案已经发布了,我的不好:https://stackoverflow.com/a/44315682/5758637

(如果紫蛙链接在将来死亡,则复制并粘贴):

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

答案 4 :(得分:0)

在proc内:

`SELECT 
table.myColumn AS [sep=, 
myColumn]
, table.myCol2
, table.myCol3...`

在“ sep =”之后的列别名中具有正常的硬返回。