如何用SQL从XML列提取Woninglabel的Min和Max属性值
从XML列提取多个Woninglabel节点的属性值
假设你的XML结构类似这样:
return (<Advertentie> <Filter>...</Filter> <Woninglabels> <Woninglabel Id="1" Min="10" Max="20"/> )<Woninglabel Id="2" Min="5" Max="15"/>
直接用.value()方法只能返回匹配路径的第一个节点的值,要提取所有Woninglabel节点的属性,必须结合.nodes()方法先将每个节点拆分为独立行,再逐个提取属性。
正确SQL语句示例
假设你的表名为Advertenties,XML列名为XmlData,可以用以下语句:
SELECT Woninglabel.value('@Id', 'INT') AS WoninglabelId, Woninglabel.value('@Min', 'DECIMAL(18,2)') AS MinWaarde, Woninglabel.value('@Max', 'DECIMAL(18,2)') AS MaxWaarde FROM Advertenties CROSS APPLY XmlData.nodes('/Advertentie/Woninglabels/Woninglabel') AS WL(Woninglabel)
关键说明
.nodes('/Advertentie/Woninglabels/Woninglabel'):定位到所有Woninglabel节点,生成包含每个节点的行集Woninglabel.value('@属性名', '数据类型'):从每个拆分出的节点中提取对应属性值,数据类型可根据实际存储的值调整(比如INT、FLOAT等)- 使用
CROSS APPLY将原表行与拆分出的节点行关联,确保每个节点对应一行结果
内容的提问来源于stack exchange,提问作者Gerie
相关产品推荐
相关产品推荐

