我使用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文档的有效性。
我在网上搜索了很多,没有解决方案,或者至少我没有看到。
任何想法都将不胜感激。
答案 0 :(得分:0)
如果您没有任何理由将结果XML格式化为查询结果,则可以将其作为电子邮件正文发送。电子邮件正文按原样发送,因此您的XML不会被破坏。要做到这一点,你只需要:
DECLARE @myxml XML
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',
...