Выбор столбца, содержащего XML, в запрос FOR XML - PullRequest
1 голос
/ 16 июня 2020

У меня есть временная таблица, в которой есть столбец «Заголовок», содержащий 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?

1 Ответ

1 голос
/ 16 июня 2020

Вы можете запросить элементы, которые являются подэлементами элемента Header. Для этого используйте метод query для значения 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 ;
...