当您使用msdb.dbo.sp_send_dbmail
以附件形式发送查询结果时,您必须提供@query_result_width
介于 10 和 32767 之间的整数的参数。
现在,如果您For XML Path('Row'), Root('Data'), Type
在最外部的 Select 查询中使用,您可能会得到 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)