目标是将以下过程嵌入到SQL Server 2008r2作业中,该作业将发送以逗号分隔的文本文件,可由非技术用户在Excel中打开该文本文件。该文件每条记录应具有1行,包括标题,并且不得被截断或填充。总体而言,我认为这是一个非常标准的非特殊文件。
但是,我遇到了多个冲突的问题:
如何获取查询结果以将其输出到可以在Excel中打开和过滤的标准文本文件中?
Exec msdb.dbo.sp_send_dbmail
@profile_name='myserver',
@reply_to='repliesgoto@here.com',
@recipients='me@company.com',
@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,
答案 0 :(得分: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 = 'x@x.com'
, @reply_to = 'x@x.com'
, @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