当您使用msdb.dbo.sp_send_dbmail
将查询结果作为附件发送时,您必须提供@query_result_width
参数,该参数是10到32767之间的整数。
现在,如果你在最外层的Select查询中使用For XML Path('Row'), Root('Data'), Type
,你可以让send_dbmail为你发送一个xml附件,这个附件很容易在Microsoft Excel中打开(只需2或3次点击,这是一个很好的excel表)
但是,如果您的xml文件超过32767字节,send_dbmail将在xml文件的第一行的第32767列插入“换行符”,并且它执行此操作无条件!这意味着它并不关心那里写的是什么;它只是打破了行,因此会破坏你的xml数据......
我一直在互联网上闲逛超过5个小时没有任何积极的结果我应该如何防止sp_send_dbmail注入那个令人讨厌的换行符。
我遇到的唯一解决方案是在我拥有控件的情况下注入换行符,而不是在第32767列之后。像下面这样的查询可以解决问题,但这是额外的工作,而不是干净......
Select Replace(
Cast(
(
Select
*
From Table
For XML Path('Row'), Root('Data'), Type
)
As NVarChar(Max))
, N'/>', N'/><!--This is the controlled line-break. Remove this comment-->
')
有人有更好的主意吗?我在这里遗漏了什么吗? 我使用SQL Server 2008 Enterprise(x64)