使用sp_send_dbmail(csv文件)时设置分隔符

时间:2015-01-12 11:01:08

标签: sql sql-server-2008

我有一个查询可以返回结果集,但当我使用sp_send_dbmail向包含此结果集的人发送电子邮件作为 CSV文件时,会在excel中打开格式不正确!我知道我可以通过excel更正此格式,但我不希望用户这样做!我希望他们能够打开文件,所有内容都以正确的格式显示。下面显示了我如何创建 CSV文件并通过电子邮件发送给某人(我也指定了分隔符,但它不起作用,我无法弄清楚原因):< / p>

EXEC msdb.dbo.sp_send_dbmail 
@profile_name='TestProfile',
@recipients='Test@gmail.com',
@subject='Test message',
@body='This is a test.',

@query = 'Select firstName, LastName, Address, Score from TestData.dbo.Student',
@query_result_header = 0,
@exclude_query_output = 1,
@append_query_error = 1,
@attach_query_result_as_file = 1,
@query_result_separator = ',',
@query_result_width = 25,
@query_attachment_filename = 'Test.csv',
@query_result_no_padding = 1

收到并打开 CSV文件后,所有数据都显示在第一列中,这不是所需的结果!

enter image description here

我的列表分隔符设置的屏幕截图

enter image description here

4 个答案:

答案 0 :(得分:4)

我在这个问题上苦苦挣扎了几天,但终于开始工作了

@query_result_separator =&#39; &#39; ,诀窍,它的TAB作为结果分隔符。

完整代码             EXEC msdb.dbo.sp_send_dbmail

              @profile_name ='MailProfile',
              @from_address = 'def@abc.com',
              @recipients = 'Abc@abc.com',
              @body = @varBody,
              @body_format = 'HTML',
              @execute_query_database ='MyDB',
              @query = @VarSQL,
              @attach_query_result_as_file = 1,
              @query_result_separator ='    ',
              @exclude_query_output =1,
              @query_result_no_padding=1,
              @query_result_header =1,
              @query_attachment_filename ='MyDB.csv'

答案 1 :(得分:2)

如果您仍在使用Excel,则可以覆盖Excel列表分隔符并在每个区域设置中一起删除所有问题。

在CSV文件的开头添加以下行: sep =;

在你的例子中,你会在你的@query中找到它。

.main{
  margin: 0 auto;
  /*max-height: 2400px;*/
  max-width: 800px;
  display: flex;
  flex-wrap: wrap;
  flex-direction: column;
  align-content: center;
}

csv的内容:

..
@query_result_separator = ';',
@query = '
print ''sep=;''
SELECT 1,2'
..

结果;正确分离。总是!

Column Separation in Excel, using forced separator

答案 2 :(得分:0)

我想我可以使用您提供的数据重现您的问题。我在superuser post中找到了答案。

似乎 Excel会忽略您的列表分隔符(如果它与另一个已使用的字符(例如小数点分隔符)是相同的字符),当您将小数点分隔符切换为其他内容时,它将起作用。但是,既然你需要在其他客户端机器上工作,你应该考虑完全切换到另一个csv分隔符(;?)

答案 3 :(得分:0)

您不能指望用户区域设置或用于打开文件的应用程序。

此外,任何Excel用户都应该了解数据 - &gt;文本到列功能。

您唯一应该注意的是可能包含字段分隔符(,)的字段,例如应使用文本限定符包装的地址(例如"