Я использую 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)
где-нибудь в код, но мне не удалось заставить это работать. Возможно ли это или мне нужно будет сделать это в другой системе?
T-SQL
. Вы можете использовать метод CLR, службу или любой вид постобработки с физически сохраненным файлом. Вы можете открыть XML из средства просмотра xml grid-results и скопировать и вставить вывод в текстовый редактор. Не забудьте установить размер XML для результата сетки на неограниченный, если ваш XML большой. - person Shnugo   schedule 08.02.2018