Выбор столбца, содержащего XML, в запросе FOR XML

У меня есть временная таблица со столбцом "Заголовок", который содержит XML, который выглядит примерно так:

<Header>
    <RecordID>Value</RecordID>
    <CompanyCode>Value</CompanyCode>
</Header>

Затем я выбираю этот столбец временной таблицы в запрос FOR XML, который выглядит так:

SELECT
    Header
FROM
    #TempTable
FOR XML PATH ('Asn'), ROOT ('Ans'), ELEMENTS 

Однако это удваивает узел заголовка и приводит к следующему XML-коду:

<Ans>
  <Asn>
    <Header>&lt;Header&gt;&lt;RecordID&gt;value&lt;/RecordID&gt;&lt;CompanyCode&gt;value&lt;/CompanyCode&gt;&lt;&lt;/Header&gt;</Header>
  </Asn>
</Asns>

Как я могу предотвратить удвоение тега заголовка, когда я выбираю его в свой XML-запрос?


person Luke4792    schedule 16.06.2020    source источник


Ответы (1)


Вы можете запрашивать элементы, которые являются подэлементами элемента Header. Используйте запрос для значения XML, чтобы сделать это.

В зависимости от того, как вы настроены, вы можете выбрать без имени столбца, чтобы удалить элемент заголовка, сгенерированный из имени столбца (см. второй запрос).

DECLARE @x XML='<Header>
    <RecordID>Value</RecordID>
    <CompanyCode>Value</CompanyCode>
</Header>';

DECLARE @t TABLE(Header XML);
INSERT INTO @t(Header)VALUES(@x);

SELECT
    Header.query('Header')
FROM
    @t
FOR XML PATH ('Asn'), ROOT ('Ans'), ELEMENTS ;

-- Alternatively, without query, depending on how you're set up
SELECT
    (SELECT Header)
FROM
    @t
FOR XML PATH ('Asn'), ROOT ('Ans'), ELEMENTS ;
person TT.    schedule 16.06.2020