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

ETL*_*ser 11 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
Run Code Online (Sandbox Code Playgroud)

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

Jod*_*dyT 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 = ','
Run Code Online (Sandbox Code Playgroud)

添加@query_result_no_padding = 1可能会稍微清理一下结果.所有这些论点都可以在这里找到

  • 请注意,这些结果将无法正确CSV格式化(转义).如果您的任何字段包含带逗号的数据,则表示您遇到了麻烦 (4认同)
  • FWIW,我发现如果你的数据包含逗号,那么如果你设置 `@temp = char(9);` 并使用 sp_send_dbmail 参数:`@query_result_separater = @temp;` 你将有一个制表符分隔的文件。无论如何,使用“.csv”扩展名保存它,Excel 将通过双击打开文件(而不必打开 Excel,然后打开或导入文件并将字段映射到列或指定分隔符)。 (3认同)

小智 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;
Run Code Online (Sandbox Code Playgroud)


小智 6

添加

'[sep=,' + CHAR(13) + CHAR(10) ColumnName] 
Run Code Online (Sandbox Code Playgroud)

结果解决了这个问题