选择包含 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><Header><RecordID>value</RecordID><CompanyCode>value</CompanyCode><</Header></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 ;
我有一个临时 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><Header><RecordID>value</RecordID><CompanyCode>value</CompanyCode><</Header></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 ;