SQL服务器:如何识别和删除具有特定属性的重复XML数据
SQL Server: How to identify and delete duplicate XML data with specific attribute
我有一个 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>
请帮忙。
您可以尝试分解您的 XML,用 Row_Number
区分不同的 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')
希望对您有所帮助
您应该能够通过 XML 数据类型的 XML Data Modification Language (XML DML), specifically the delete command. XML DML uses the modify() Method 以及 XQuery 表达式进行就地修改。
它应该类似于以下内容:
UPDATE SchemaName.TableName
SET XmlFieldName.modify('delete {XQuery expression}');
我有一个 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>
请帮忙。
您可以尝试分解您的 XML,用 Row_Number
区分不同的 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')
希望对您有所帮助
您应该能够通过 XML 数据类型的 XML Data Modification Language (XML DML), specifically the delete command. XML DML uses the modify() Method 以及 XQuery 表达式进行就地修改。
它应该类似于以下内容:
UPDATE SchemaName.TableName
SET XmlFieldName.modify('delete {XQuery expression}');