18

我正在研究 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

任何帮助将不胜感激。提前致谢。

4

5 回答 5

41

添加@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可能会稍微清理结果。所有的论点都可以在这里找到

于 2013-03-04T20:15:13.973 回答
13
@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;
于 2014-06-25T12:40:08.763 回答
7

添加

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

结果解决了这个问题

于 2015-11-27T15:00:40.487 回答
3

这条关于紫色青蛙的评论表明您也可以使用制表符作为分隔符:

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 

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

于 2017-10-06T18:32:49.130 回答
0

在一个过程中:

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

在“sep=”之后的列别名内有一个正常的硬返回。

于 2018-11-20T16:44:49.320 回答