我有一个XML列,其中包含一些重复的节点(属性)。我想识别并删除它们。
我的XML看起来像这样。
<contact id="1">
<lname>AA</lname>
<fname>BB</fname>
</contact>
<contact id="2">
<lname>CC</lname>
<fname>DD</fname>
</contact>
**<contact id="2">
<lname>EE</lname>
<fname>FF</fname>
</contact>**
<contact id="3">
<lname />
<fname />
</contact>
我想删除此节点,其重复属性值为id =“2”。
<contact id="2">
<lname>EE</lname>
<fname>FF</fname>
</contact>
请帮忙。
答案 0 :(得分:1)
您可以尝试使用Row_Number
分解XML,区分不同的ID,然后重新组合xml。
我的意思是这样的:
Select t.id As '@id',
t.fname As 'fname',
t.lname As 'lname'
From (
Select x.value('@id[1]', 'varchar(30)') As id,
x.value('lname[1]', 'varchar(30)') As lname,
x.value('fname[1]', 'varchar(30)') As fname,
Row_Number() Over (Partition By x.value('@id[1]', 'varchar(30)') Order By x.value('@id[1]', 'varchar(30)')) As r
from @x.nodes('/contact') as t(x)
) As t
Where t.r = 1
For Xml Path('contact')
我希望它可以帮到你。
答案 1 :(得分:0)
您应该可以通过XML Data Modification Language (XML DML)进行就地修改,特别是delete命令。 XML DML使用XML数据类型的modify() Method以及XQuery表达式。
它应该类似于以下内容:
UPDATE SchemaName.TableName
SET XmlFieldName.modify('delete {XQuery expression}');