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}');