每个根节点之后的SQL Server FOR XML PATH回车

时间:2018-02-06 23:59:28

标签: sql-server xml tsql for-xml-path

我在SQL Server 2014中使用FOR XML PATH生成XML文件以发送给我们的供应商。他们的系统要求每个根节点由回车符/换行符分隔。这是我用来生成它的T-SQL代码:

    let annotation2 = MKPointAnnotation()
    annotation2.coordinate = CLLocationCoordinate2DMake(0,0)
    annotation2.title = "title2"
    annotation2.subtitle = "Do2 any additional setup after loading the view, typically from a nib. "
    self.mapView.addAnnotation(annotation2)

这很好用,但返回一个长字符串,节点之间根本没有分隔。 (我会发一个例子,但这里看起来就像混乱的混乱。)

无论如何,我们需要的是生成一个文件,其中每个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>,但我一直无法解决这个问题。是否有可能或者我需要在另一个系统中进行此操作?

2 个答案:

答案 0 :(得分:0)

您可以在将xml转换为varchar

后尝试进行替换
select REPLACE(CONVERT(VARCHAR(MAX), @xmldata), '><', ( '>' + CHAR(13) + char(10)) + '<' ) as returnXml

答案 1 :(得分:0)

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

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