sp_db_sendmail的XML结果文件中的换行符

时间:2014-07-17 13:37:14

标签: xml sql-server-2008 tsql

我使用sp_db_sendmail作为查询的直接结果发送XML文件。 代码如下:

DECLARE @qry nvarchar(max), @Vendor varchar(20)
set @Vendor='vcode'

SET @qry=' SET NOCOUNT ON; 
           select 
                 OrderHeader.No [OrderNo]
                ,OrderHeader.[Date] [OrderDate]
                ,OrderLines.[Line] [LineNo]
                ,OrderLines.[CrossRefNo] [Barcode]
                ,OrderLines.[UoM] [Unit]
                ,OrderLines.Quantity
                from dbo.OrderHeader 
                ....
            where OrderHeader.[Pay-to Vendor No_]=''' + @Vendor + ''' 
            order by OrderHeader.No, OrderLines.[Line]
            FOR XML AUTO,ELEMENTS,TYPE,ROOT(''Orders'')'

EXEC msdb.dbo.sp_send_dbmail
  @profile_name = 'SQLMailProfile',
  @recipients = 'myMailhere@somewhere.com',
  @body= 'A body here',
  @subject = 'A subject',
  @query = @qry,
  @query_attachment_filename='Orders.xml',
  @attach_query_result_as_file =1,
  @query_result_header=0,
  @query_no_truncate=1 

除了生成的XML文件之外,所有内容都可以正常工作,在256列中,它会创建换行符,从而破坏XML文档的有效性。

我在网上搜索了很多,没有解决方案,或者至少我没有看到。

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您没有任何理由将结果XML格式化为查询结果,则可以将其作为电子邮件正文发送。电子邮件正文按原样发送,因此您的XML不会被破坏。要做到这一点,你只需要:

  • Delare XML变量:

DECLARE @myxml XML

  • 将查询结果分配给@myxml

SELECT @myxml = (select OrderHeader.No [OrderNo] ,OrderHeader.[Date] [OrderDate] ,OrderLines.[Line] [LineNo] ,OrderLines.[CrossRefNo] [Barcode] ,OrderLines.[UoM] [Unit] ,OrderLines.Quantity from dbo.OrderHeader .... where OrderHeader.[Pay-to Vendor No_]=@Vendor order by OrderHeader.No, OrderLines.[Line] FOR XML AUTO,ELEMENTS,TYPE,ROOT('Orders') )

  • 以电子邮件正文发送结果:

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'SQLMailProfile', @recipients = 'myMailhere@somewhere.com', @body= CAST(@myxml AS NVARCHAR(MAX)), @subject = 'A subject', ...