寻找洞察力,以了解如何更好地控制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>