Sql 如何以CSV格式发送查询结果?
我正在研究ETL,在SSIS包中的sql任务中有以下sql代码。这就是我编写代码的方式。我正在从表中选择数据,并将该查询的结果作为文件。我希望此附件以CSV格式发送。我该怎么做Sql 如何以CSV格式发送查询结果?,sql,ssis,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
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\u result\u分隔符应该可以
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\u result\u no\u padding=1
可能会稍微清理结果。可以在添加中找到所有非参数
'[sep=,' + CHAR(13) + CHAR(10) ColumnName]
结果解决了这个问题
请参见指示您也可以使用制表符作为分隔符:
看起来这个答案已经发布了,我的错:在一个进程中:
SELECT
table.myColumn AS [sep=,
myColumn]
, table.myCol2
, table.myCol3...
如果在“sep=,”之后的列别名中有一个普通的硬回车符,那么为什么不根据需要使用SSIS的功能来创建CSV文件和发送邮件任务来发送电子邮件呢。这是唯一的方法。我在下面添加了一个答案,该答案应将查询结果格式化为CSV,并添加了有关sp_send_dbmail sp的更多信息。如果这对你有用,你能接受答案吗?嘿,谢谢:-)我得到了我想要的。非常感谢。带有@attach\u query\u result\u as\u file=1的行的末尾需要一个逗号,否则代码将抛出错误。请注意,这些结果将不会正确设置为CSV格式(转义)。如果您的任何字段包含带有逗号的数据,您会遇到麻烦。此答案与在MS Excel中打开CSV文件不兼容。分隔符不够,但需要将CSV文件第一行中的分隔符指定为sep=,
。否则,所有列将显示在MS Excel.FWIW的一列中,我发现如果您的数据包含逗号,那么如果您设置@temp=char(9)
并使用sp_send_dbmail参数:@query\u result\u separator=@temp代码>您将拥有一个以制表符分隔的文件。无论如何,请使用“.csv”扩展名保存它,Excel将在双击时打开文件(而不必打开Excel,然后打开或导入文件并将字段映射到列或指定分隔符)。在@query定义中使用NOCOUNT是个好主意+1在过程中:选择table.myColumn作为[sep=,myColumn]
,并在列别名中使用正常硬返回。
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
SELECT
table.myColumn AS [sep=,
myColumn]
, table.myCol2
, table.myCol3...