SQL Server中跨不同父元素按值查询XML元素的方法
通用解决方案:使用XQuery通配符匹配任意父元素
直接利用SQL Server的XQuery功能,通过通配符节点选择跳过不确定的父元素类型,一次性定位到目标<Name>和<Value>元素,不需要为每种类型单独写查询。
核心查询语句
SELECT XmlData.value('(//*[Name/text()="Look for this name"]/Value/text())[1]', 'nvarchar(max)') AS TargetValue FROM YourTableName WHERE XmlData.exist('//*[Name/text()="Look for this name"]') = 1;
语句说明
//*:匹配XML中任意层级的所有元素,不管父元素是TypeOneItem还是其他任意类型,都能覆盖到[Name/text()="Look for this name"]:筛选出包含指定<Name>值的元素/Value/text():提取该元素下对应的<Value>文本内容[1]:确保只返回第一个匹配的结果(如果有多个同名<Name>,可根据需求调整)exist()函数:提前过滤掉没有目标数据的行,提升查询效率
扩展场景:提取多个匹配结果
如果同一行XML中有多个符合条件的<Name>元素,要返回所有匹配的<Value>,可以改用nodes()方法拆分多行:
SELECT n.value('(Value/text())[1]', 'nvarchar(max)') AS TargetValue FROM YourTableName CROSS APPLY XmlData.nodes('//*[Name/text()="Look for this name"]') AS t(n);
内容的提问来源于stack exchange,提问作者Duncan
相关产品推荐
相关产品推荐

