Возврат каретки SQL Server FOR XML PATH после каждого корневого узла

Я использую FOR XML PATH в SQL Server 2014 для создания файла 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) где-нибудь в код, но мне не удалось заставить это работать. Возможно ли это или мне нужно будет сделать это в другой системе?


person Dillon P    schedule 06.02.2018    source источник
comment
попробуйте без PATH.. попробуйте AUTO или другой вариант   -  person JamieD77    schedule 07.02.2018
comment
Путь — это то, что дает корневому узлу тег «Биллинг», не так ли? Кроме того, я пробовал АВТО, и это не имело значения.   -  person Dillon P    schedule 07.02.2018
comment
Чего вы пытаетесь достичь, помещая этот возврат каретки между корневыми узлами? XML не предназначен для чтения человеком, и любой его парсер должен иметь возможность читать его без него.   -  person tarheel    schedule 07.02.2018
comment
На самом деле проблема не на вашей стороне: Их система требует, чтобы каждый корневой узел отделялся символом возврата каретки, что означает, что они используют неправильный инструмент...   -  person Shnugo    schedule 07.02.2018
comment
Шнуго прав... это ограничение системы нашего вендора. Плохой дизайн, я знаю, но мы, конечно, не можем это контролировать.   -  person Dillon P    schedule 07.02.2018
comment
Красивая печать XML изначально не поддерживается в T-SQL. Вы можете использовать метод CLR, службу или любой вид постобработки с физически сохраненным файлом. Вы можете открыть XML из средства просмотра xml grid-results и скопировать и вставить вывод в текстовый редактор. Не забудьте установить размер XML для результата сетки на неограниченный, если ваш XML большой.   -  person Shnugo    schedule 08.02.2018


Ответы (1)


Основываясь на ответах здесь и исследованиях в других местах, это невозможно с использованием только T-SQL. Нам нужно будет либо скопировать/вставить вывод, либо использовать другую программу, чтобы взять данные и вставить разрывы строк.

От @Shnugo - «Красивая печать XML изначально не поддерживается в T-SQL. Вы можете использовать метод CLR, службу или любой вид постобработки с физически сохраненным файлом. Вы можете открыть XML из результатов сетки». xml Viewer и скопируйте и вставьте вывод в текстовый редактор. Не забудьте установить неограниченный размер XML для результата сетки, если ваш XML большой».

person Dillon P    schedule 14.02.2018