【发布时间】:2018-07-17 03:46:56
【问题描述】:
我在 SQL Server 2014 中使用 FOR XML PATH 来生成一个 XML 文件以发送给我们的供应商之一。他们的系统要求每个根节点用回车/换行符分隔。这是我用来生成它的 T-SQL 代码:
Declare @xmldata xml
set @xmldata =
(SELECT a.StatementDate AS [stmt_date]
,a.CustomerID AS [student_id]
,'Upon Receipt' AS [due_date]
,a.TotalDue AS [curr_bal]
,a.TotalDue AS [total_due]
,a.AlternateID AS [alternate_id]
,a.FullName AS [student_name]
,a.Email AS [student_email]
,a.Addr1
,a.Addr2
,a.Msg AS [message]
,(
SELECT b.StatementDate AS [activity_date]
,b.ActivityDesc AS [activity_desc]
,b.TermBalance AS [charge]
FROM #ActivityXML AS b
WHERE a.CustomerID = b.CustomerID
ORDER BY a.StatementDate
FOR XML PATH('activity'),TYPE
)
FROM #BillingStatement AS a
FOR XML PATH('Billing'))
select @xmldata as returnXml
这很好用,但返回一个长字符串,节点之间根本没有分隔。 (我会发布一个示例,但在这里看起来就像是一团糟。)
无论如何,我们需要的是生成一个文件,其中每个<Billing> 标记和其中的内容都放在</Billing> 结束标记之后的新行上。我猜有一个简单的解决方案,例如在代码中的某处插入char(13)+char(10),但我一直无法让它工作。有可能还是我需要在另一个系统中进行?
【问题讨论】:
-
尝试不使用 PATH.. 尝试 AUTO 或其他选项
-
路径是给根节点
标签的,不是吗?除此之外,我尝试了 AUTO 并没有什么不同。 -
你想通过在根节点之间放置回车来完成什么? XML 并不是人类可读的,没有它的任何解析器都应该能够很好地读取它。
-
问题实际上不在你这边:他们的系统要求每个根节点用回车符分隔意味着他们使用了错误的工具...
-
Shnugo 是正确的...这是我们供应商系统的限制。糟糕的设计,我知道,但我们当然无法控制。
标签: sql-server xml tsql for-xml-path