SQL Server中使用nodes()方法拆分XML:单查询如何获取多字段?
解决SQL Server中XML节点拆分同时获取属性和子节点值的问题
嘿,我来帮你搞定这个XML拆分的问题!你原来的查询只拿到了customer节点的id属性,要同时获取NAME子节点的内容,只需要在SELECT语句里多加一个.value()调用就可以了。
先提个小细节:你的XML里<Customer>标签开头是大写C,结尾</customer>是小写c,SQL Server的XQuery是区分大小写的,写节点路径的时候要保持一致(最好统一XML标签的大小写,避免后续踩坑)。
下面是完整的可运行查询示例:
DECLARE @xml XML = '<abc> <item> <Customer id="12345" age="26"> <NAME>Alex</NAME> </Customer> </item> </abc>'; SELECT doc.col.value('@id','INT') AS CustomerID, doc.col.value('NAME[1]','VARCHAR(50)') AS CustomerName FROM @xml.nodes('/abc/item/Customer') doc(col);
关键说明:
@id表示取当前Customer节点的id属性值NAME[1]表示取当前节点下第一个NAME子节点的文本内容,加上[1]是因为SQL Server要求明确指定节点位置(哪怕只有一个子节点,也需要这么写来避免潜在的多节点匹配问题)- 一定要保证XML标签和XQuery路径的大小写一致,不然会返回NULL哦
内容的提问来源于stack exchange,提问作者Aura
相关产品推荐
相关产品推荐

