【问题标题】:SQL Server FOR XML PATH carriage return after each root node每个根节点后的 SQL Server FOR XML PATH 回车
【发布时间】: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


【解决方案1】:

根据此处的回复和其他地方的研究,仅使用 T-SQL 是不可能的。我们需要复制/粘贴输出,或者使用另一个程序来获取数据并插入换行符。

来自@Shnugo - “T-SQL 本身不支持漂亮的 XML 打印。您可以使用 CLR 方法、服务或任何类型的物理存储文件的后处理。您可以从网格打开 XML -results 的 xml 查看器并将输出复制粘贴到文本编辑器。如果您的 XML 很大,请不要忘记将网格结果的 XML 大小设置为无限制。"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多