sp_send_dbmail - 无法附加查询结果

问题描述 投票:0回答:1

目标是在SQL Server 2008r2作业中嵌入以下过程,该作业将发送逗号分隔的文本文件,该文件可由非技术用户在Excel中打开。该文件每个记录应该有1行,包括标题,不能被截断或填充。总的来说,我认为这是一个非常标准的非特殊文件。

但是,我遇到了多个相互矛盾的问题:

  • 每个字段都放在一个单独的行上。每行填充空格为256个字符。这两者都使文件几乎无法使用,并且太大而无法通过电子邮件发送。设置@ query_result_no_padding = 1可以解决此问题。
  • 如果每行(包括逗号)超过256个字符,则该行将被截断并复制到下一行。设置@ query_no_truncate = 1应该解决这个问题,但是当@ query_result_no_padding = 1时会抛出错误
  • 经过一些试验和错误后,我认为@query_no_truncate不适用于标题。列标题粘贴在几行上,我对此感到不知所措。文档中的所有选项似乎都不适用于此处。

如何将此查询结果输出到可在Excel中打开和过滤的标准文本文件中?

    Exec msdb.dbo.sp_send_dbmail
      @profile_name='myserver',
      @reply_to='[email protected]',
      @recipients='[email protected]',

      @subject='my subject line',
      @body=@HTMLbody,
      @body_format='html'

      @query='Select * from myserver.dbo.mytable',
      @attach_query_result_as_file = 1,
      @query_attachment_filename='x.txt',
      @query_result_header=1,
      @query_result_separator=',',
      @query_result_no_padding=1,
      --@query_result_width=300,
      --@query_no_truncate=1,

我对此proc的主要文档: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-send-dbmail-transact-sql?view=sql-server-2017

sql-server sql-server-2008 sql-server-2008-r2
1个回答
0
投票

我很确定问题是表中的CHAR数据类型,因为VARCHAR不会发生这个问题。

use tempdb
go
create table dbo.t1 (col1 char(10), col2 char(20));
go
insert into dbo.t1 values ('1', '1')
    , ('2', '2')
    , ('3', '3');
go
select quotename(col1), quotename(col2) from dbo.t1;
go

结果:

[1         ], [1                   ]
[2         ], [2                   ]
[3         ], [3                   ]

现在执行以下命令,但RTRIM列:

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'test'
, @recipients = '[email protected]'
, @reply_to = '[email protected]'
, @subject = 'test2'
, @body_format = 'HTML'
, @query = 'set nocount on; select rtrim(col1) as col1, rtrim(col2) as col2 from dbo.t1'
, @execute_query_database = 'tempdb'
, @attach_query_result_as_file = 1
, @query_attachment_filename='x.txt'
, @query_result_header=1
, @query_result_separator=',';

附件的电子邮件结果:

col1,col2
----,----
1,1
2,2
3,3
© www.soinside.com 2019 - 2024. All rights reserved.