删除重复的 XML 个节点 SQL 查询
Remove duplicate XML nodes SQL query
我有以下 XML.
<Root>
<Child1>
<SubChild1>some value</PartNumber>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child5>some data</Child5>
</Root>
我想删除重复的节点和 return 以下格式的 XML。
<Root>
<Child1>
<SubChild1>some value</PartNumber>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child5>some data</Child5>
</Root>
我尝试了下面的 SQL 查询,但没有成功。
SELECT @myXMLData.query('
for $x in distinct-values(//*)[1]
return
(//*)[1]
')
我也试过 distinct-values
但它 return 是值(没有包含节点属性)。
SELECT @XML.query('<Root>{ distinct-values(//*) }</Root>')
请帮忙解决这个问题?
declare @x xml = N'<Root>
<Child1>
<SubChild1>some value</SubChild1>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child5>some data</Child5>
</Root>';
select node as '*'
from
(
select x.e.query('.') as node, row_number() over(partition by x.e.value('local-name(.)', 'nvarchar(100)') order by x.e) as nodenum
from @x.nodes('Root/*') as x(e)
) as src
where nodenum = 1
for xml path(''), root('Root');
我有以下 XML.
<Root>
<Child1>
<SubChild1>some value</PartNumber>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child5>some data</Child5>
</Root>
我想删除重复的节点和 return 以下格式的 XML。
<Root>
<Child1>
<SubChild1>some value</PartNumber>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child5>some data</Child5>
</Root>
我尝试了下面的 SQL 查询,但没有成功。
SELECT @myXMLData.query('
for $x in distinct-values(//*)[1]
return
(//*)[1]
')
我也试过 distinct-values
但它 return 是值(没有包含节点属性)。
SELECT @XML.query('<Root>{ distinct-values(//*) }</Root>')
请帮忙解决这个问题?
declare @x xml = N'<Root>
<Child1>
<SubChild1>some value</SubChild1>
</Child1>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child4>some data</Child4>
<Child2>some data</Child2>
<Child3>some data</Child3>
<Child5>some data</Child5>
</Root>';
select node as '*'
from
(
select x.e.query('.') as node, row_number() over(partition by x.e.value('local-name(.)', 'nvarchar(100)') order by x.e) as nodenum
from @x.nodes('Root/*') as x(e)
) as src
where nodenum = 1
for xml path(''), root('Root');