【发布时间】:2019-03-01 21:49:15
【问题描述】:
目标是将以下过程嵌入到 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='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,
【问题讨论】:
-
看起来问题在于您选择的列是 CHAR。我敢打赌,如果列是 VARCHAR,你会得到预期的结果。
标签: sql-server sql-server-2008 sql-server-2008-r2