gpt4 book ai didi

sql - 您如何使用 sp_send_dbmail 存储过程和 SQL 将查询结果作为 csv 发送电子邮件?

转载 作者:行者123 更新时间:2023-12-03 23:20:54 25 4
gpt4 key购买 nike

我想发送一封包含查询结果的电子邮件作为 csv 附件。

到目前为止,我有这个;

EXEC msdb.dbo.sp_send_dbmail
@recipients='me@myself.com',
@subject='CSV Extract',
@profile_name = 'Valid profile',
@body='See attachment',
@query ='SELECT TOP 10 c.* FROM MyDb.dbo.Customers c',
@attach_query_result_as_file = 1,
@query_attachment_filename = 'CSV_Extract.csv',
@query_result_separator = ','

我收到了带有 csv 附件的电子邮件,但是在 Excel 中打开时,结果格式很糟糕(例如,所有值都在一个看似随机缩进的列中)

我应该怎么做才能使用正确的列标题等获得格式正确的结果?

编辑

我在查询中添加了以下参数;
@query_result_width = 32767,
@query_result_no_padding = 1

这改进了很多,但是当在 Excel 中打开时,我仍然将每条记录放在一个列中。如何将记录中的每个值放入它自己的列中?

这是我目前得到的;

enter image description here

这就是我所追求的;

enter image description here

最佳答案

问题是 Excel 不理解这些列。要解决此问题,您需要向 Excel 发送说明 csv 文件的说明。

该指令需要是文件的第一部分,在数据之前,因此您必须为查询中的第一个字段创建一个别名,其中包含 Excel 指令以及您想要的实际名称

指令是“sep=,”,以确保excel能够理解逗号字段分隔符。

DECLARE @column1name varchar(50)

-- Create the column name with the instrucation in a variable
SET @Column1Name = '[sep=,' + CHAR(13) + CHAR(10) + 'Name]'
DECLARE @qry varchar(8000)

-- Create the query, concatenating the column name as an alias
SELECT @qry='set nocount on; SELECT TOP 10 c.CCustName ' + @column1name +
' ,c.CID Id FROM MyDb.dbo.Customers c'

EXEC msdb.dbo.sp_send_dbmail
@recipients='me@myself.com',
@subject='CSV Extract',
@profile_name = 'Valid Profile',
@body='See attachment',
@query =@qry,
@attach_query_result_as_file = 1,
@query_attachment_filename = 'CSV_Extract.csv',
@query_result_separator = ',',
@query_result_width = 32767,
@query_result_no_padding = 1

这些是最终结果;

enter image description here

它并不完美(第二行很烦人)但对于我的目的来说肯定足够了

关于sql - 您如何使用 sp_send_dbmail 存储过程和 SQL 将查询结果作为 csv 发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com