目标是在SQL Server 2008r2作业中嵌入以下过程,该作业将发送逗号分隔的文本文件,该文件可由非技术用户在Excel中打开。该文件每个记录应该有1行,包括标题,不能被截断或填充。总的来说,我认为这是一个非常标准的非特殊文件。
但是,我遇到了多个相互矛盾的问题:
如何将此查询结果输出到可在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,
我很确定问题是表中的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