我有一个查询可以返回结果集,但当我使用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文件后,所有数据都显示在第一列中,这不是所需的结果!
我的列表分隔符设置的屏幕截图
答案 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'
..
结果;正确分离。总是!
答案 2 :(得分:0)
我想我可以使用您提供的数据重现您的问题。我在superuser post中找到了答案。
似乎 Excel会忽略您的列表分隔符(如果它与另一个已使用的字符(例如小数点分隔符)是相同的字符),当您将小数点分隔符切换为其他内容时,它将起作用。但是,既然你需要在其他客户端机器上工作,你应该考虑完全切换到另一个csv分隔符(;
?)
答案 3 :(得分:0)
您不能指望用户区域设置或用于打开文件的应用程序。
此外,任何Excel用户都应该了解数据 - &gt;文本到列功能。
您唯一应该注意的是可能包含字段分隔符(,
)的字段,例如应使用文本限定符包装的地址(例如"
)