我正在研究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
任何帮助将非常感谢。提前致谢。
答案 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)
答案 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 =”之后的列别名中具有正常的硬返回。