选择包含 XML 的列到 FOR XML 查询中

Selecting column containing XML into FOR XML query

我有一个临时 table,它有一个包含 XML 的列 'Header',看起来像这样:

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

然后我 select 将该临时 table 列放入 FOR XML 查询中,看起来像这样:

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

但是,这会使 header 节点加倍,并导致 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>

当我 select 进入我的 XML 查询时,如何阻止 header 标签加倍?

您可以查询作为 Header 元素子元素的元素。在 XML 值上使用 query 方法来做到这一点。

根据您的设置方式,您可以 select 在没有列名的情况下删除从列名生成的 Header 元素(请参阅第二个查询)。

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 ;