Sql server 如何在tSQL中删除不必要的空白命名空间并添加命名空间前缀

Sql server 如何在tSQL中删除不必要的空白命名空间并添加命名空间前缀,sql-server,xml,tsql,sql-server-2005,xml-namespaces,Sql Server,Xml,Tsql,Sql Server 2005,Xml Namespaces,当我运行查询时,名称空间与根元素一起添加,但与第二个元素一起添加的还有xmlns=。。。我想删除这个。。。我需要给一些元素添加名称空间前缀 我举了一个例子: declare @xml_h as xml declare @xml_d as xml select @xml_h = ( select NewID() as [UID] for XML PATH('Head') ) select @xml_d = ( select NULL, (

当我运行查询时,名称空间与根元素一起添加,但与第二个元素一起添加的还有xmlns=。。。我想删除这个。。。我需要给一些元素添加名称空间前缀

我举了一个例子:

declare @xml_h as xml
declare @xml_d as xml

select @xml_h = (
    select NewID() as [UID]
    for XML PATH('Head')
    )

select @xml_d = (
    select NULL, 
    (
        select 'V00001' as [ID],
            'Some name' as [Name]
        for XML PATH('SubData'), TYPE
    )
    for XML PATH('Data')
    )

;with XmlNameSpaces (DEFAULT 'uri_1', 'uri_2' as t)
select @xml_h, @xml_d for XML PATH(''), ROOT('ROOT')
结果是:

<ROOT xmlns:t="uri_2" xmlns="uri_1">
    <Head xmlns="">
        <UID>B12B8836-2061-4934-AC06-67D34579D1A6</UID>
    </Head>
    <Data xmlns="">
        <SubData>
            <ID>V00001</ID>
            <Name>Some name</Name>
        </SubData>
    </Data>
</ROOT>
但我需要这个:

<ROOT xmlns:t="uri_2" xmlns="uri_1">
    <Head>
        <t:UID>B12B8836-2061-4934-AC06-67D34579D1A6</t:UID>
    </Head>
    <Data>
        <t:SubData>
            <t:ID>V00001</t:ID>
            <t:Name>Some name</t:Name>
        </t:SubData>
    </Data>
</ROOT>
有没有办法删除不必要的空白名称空间并添加名称空间前缀


谢谢

这将构建一个与您想要的XML等价的XML

将@xml_h声明为xml 将@xml\u d声明为xml ;XmlNameSpaces的默认值为“uri_1”,“uri_2”为t 选择@xml_h= 选择NewID作为[t.UID] 对于XML路径“Head” ;XmlNameSpaces的默认值为“uri_1”,“uri_2”为t 选择@xml\u d= 选择NULL, 选择“V00001”作为[t.ID], “Some name”作为[t.name] 对于XML路径't.SubData',键入 对于XML路径“数据” ;XmlNameSpaces的默认值为“uri_1”,“uri_2”为t 选择@xml_h,@xml_d作为xml路径,根'ROOT' ABBECBF4-59BE-46DF-B42E-4325748E0079 V00001 某个名字
如您所见,子元素中重复了名称空间声明。如果您确实对此有问题,您可以重写查询以供使用,也可以将您的投票添加到SQL Server的未来版本中,并希望它成为SQL Server未来版本的一部分。

可能是,您只需将t:添加到查询中的列名中,如。。。选择NewID作为[t:UID]等等?sql server如何知道名称空间前缀为?谢谢您的回复。最后,我不得不重写查询以使用显式模式。