看看这个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
有什么想法吗?
答案 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