首页 > 解决方案 > 带有命名空间的 TSQL xml 输出

问题描述

寻找有关如何更好地控制 SQL Server 2016 放置 XML 命名空间的见解。下面是正确格式化数据的查询(请不要问为什么 subData,我不知道,希望不是这样,但它是......)

 WITH XMLNAMESPACES ('http://www.adomain.com' as ns2)
 select td1.id as '@id',
    (
    select td2.questionNumber, td2.questionType, td2.section
    from @TestData td2
    where td1.id = td2.id
    FOR XML PATH('subData'), TYPE
    ) as xml_output
   from @TestData td1
order by td1.questionNumber
 FOR XML path ('mainData'), ROOT('ns2:theRoot');

输出是正确的,但由于某种原因,它总是将 xmlns:ns2="http://www.adomain.com" 放在每个子数据上。查询需要如何更改以使命名空间仅在 theRoot 上?

<ns2:theRoot xmlns:ns2="http://www.adomain.com">
    <mainData id="A_SHORTA">
        <xml_output>
            <subData xmlns:ns2="http://www.adomain.com">
                <questionNumber>A_SHORTA</questionNumber>
                <questionType>rad</questionType>
                <section>A</section>
            </subData>
        </xml_output>
    </mainData>
</ns2:theRoot>

标签: sql-servertsqlxml-namespaces

解决方案


推荐阅读