如何在Sql Server 2008中检索Xml节点的多个值

时间:2011-02-23 09:07:07

标签: sql xml

看看这个Xml

<Criteres>
   <TypesOffre>
      <TypeOffre>Appartement</TypeOffre>
      <TypeOffre>Maison</TypeOffre>
   </TypesOffre>
</Criteres>

我想检索TypeOffre节点的值并在JOIN中使用它们,如下面的语句

SELECT T2.Nom
FROM RechercheOffre T1
     INNER JOIN TypeOffre T2 ON (T1.Xml.value('(/Criteres/TypesOffre/TypeOffre)[1]', 'varchar(max)') = T2.Nom)

我不能使用value方法,因为她需要一个实例......

并且查询方法在单个列中返回Typeoffre节点的值,如此

AppartementMaison

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT T2.Nom
FROM RechercheOffre T1
CROSS APPLY T1.Xml.nodes('/Criteres/TypesOffre/TypeOffre') AS CTT(TypeOffre)
WHERE 
  T2.Nom = TypeOffre.value('(.)', 'varchar(50)') 

您需要在CROSS APPLY XQuery函数上使用.nodes()来获取XML行的伪列表,然后您可以从XML节点中提取单个值并与其他位进行比较你的数据库。

答案 1 :(得分:0)

加入

SELECT T2.Nom
FROM RechercheOffre T1
CROSS APPLY T1.Xml.nodes('/Criteres/TypesOffre/TypeOffre') AS CTT(TypeOffre)
INNER JOIN TypeOffre T2 ON (TypeOffre.value('(.)', 'varchar(50)') = T2.Nom)

谢谢你的marc_s