Sql server 在XML列中查找重复值

Sql server 在XML列中查找重复值,sql-server,xml,Sql Server,Xml,在我的SQL Server数据库中,我有一个带有XML列的表。其中的XML类似于下面的示例: <Rows> <Row> <Name>John</Name> </Row> <Row> <Name>Debbie</Name> </Row> <Row> <

在我的SQL Server数据库中,我有一个带有XML列的表。其中的XML类似于下面的示例:

<Rows>
      <Row>
           <Name>John</Name>
      </Row>
      <Row>
           <Name>Debbie</Name>
      </Row>
      <Row>
           <Name>Annie</Name>
      </Row>
      <Row>
           <Name>John</Name>
      </Row>
</Rows>

约翰
黛比
安妮
约翰
我有一个要求,即我需要找到XML数据具有重复的
条目的所有行的出现情况。例如,上面的XML中有两个“John”


我可以使用
exist
XML语句查找1个匹配项,但是如何查找它是否超过1个?谢谢。

要识别XML中有重复值的任何表行,您也可以使用
exist

exist('//Name[. = preceding::Name]')
要分别识别哪些名称是重复的,您需要
节点
交叉应用

选择
t、 身份证,
x、 Name.value(‘.’,‘varchar(100)’)作为重复名称
从…起
MYT表
将t.MyXmlColumn.nodes('//Name[.=preference::Name]')交叉应用为x(Name)
哪里
t、 MyXmlColumn.exist(“//Name[.=preference::Name]”)
试试这个:

;with cte as
(SELECT tbl.col.value('.[1]', 'varchar(100)') as name
 FROM   yourtable
 CROSS APPLY xmlcol.nodes('/Rows/Row/Name') as tbl(col))

select name
from cte
group by name
having count(name) > 1
我们首先使用
节点
函数将XML转换为关系数据,然后使用
获取
名称
节点内的文本。然后,我们将上一步的结果放入CTE,并使用一个简单的
group by
来获得多次出现的值


@Tomalak是的,它支持多种语言,甚至还支持C#的自动完成功能。非常方便!