【问题标题】:How do you email a query result as a csv using sp_send_dbmail stored procedure with SQL?如何使用带有 SQL 的 sp_send_dbmail 存储过程以 csv 格式发送查询结果?
【发布时间】:2017-02-19 22:06:48
【问题描述】:

我想发送一封包含查询结果作为 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 中打开时,我仍然将每条记录放在一个列中。如何将记录中的每个值放入它自己的列中?

这是我目前得到的;

这就是我所追求的;

【问题讨论】:

  • 由于您需要的格式只有您自己知道,请尝试使用以下值@query_result_separator=',',@query_result_width =32767, @query_result_no_padding=1
  • 包括“set nocount on;”在查询字符串中删除了我的结果中的“(受影响的 2 行)”行

标签: sql sql-server tsql csv stored-procedures


【解决方案1】:

问题在于 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

这些是最终结果;

它并不完美(第二行很烦人),但对于我的目的来说确实足够好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多