You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL Server 2012中XML类型列的SQL查询?

嘿,针对你在SQL Server 2012里查询XML列的需求,我给你整理了几种实用的写法,按需选择就好:

1. 提取指定Item的具体值

如果明确要获取Monitor组里Cid和Tid的Value,直接用value()方法配合XPath定位就行:

SELECT 
    Information.value('(/Information/Groups/Group[@Name="Monitor"]/Items/Item[Name="Cid"]/Value)[1]', 'VARCHAR(50)') AS Cid,
    Information.value('(/Information/Groups/Group[@Name="Monitor"]/Items/Item[Name="Tid"]/Value)[1]', 'VARCHAR(50)') AS Tid
FROM abc;

这里的[1]是必须的——SQL Server要求确保XPath只返回单个节点,避免因为多个匹配导致报错。你可以根据实际值的类型调整后面的VARCHAR(50),比如数字就换成BIGINT。

2. 把XML嵌套结构展开成关系表

要是想把所有Item都拆成单独的行(比如查看整个Monitor组下的所有键值对),用nodes()方法拆分节点再关联就行:

SELECT 
    GroupNode.value('@Name', 'VARCHAR(50)') AS GroupName,
    ItemNode.value('(Name)[1]', 'VARCHAR(50)') AS ItemName,
    ItemNode.value('(Value)[1]', 'VARCHAR(50)') AS ItemValue
FROM abc
CROSS APPLY Information.nodes('/Information/Groups/Group') AS Groups(GroupNode)
CROSS APPLY GroupNode.nodes('Items/Item') AS Items(ItemNode)
WHERE GroupNode.value('@Name', 'VARCHAR(50)') = 'Monitor';

nodes()会把XML里的匹配节点转换成行集,再通过CROSS APPLY把Group和对应的Item关联起来,这样就能把嵌套的XML变成普通的二维表结构,方便后续统计或筛选。

小提示
  • SQL Server 2012完全支持这些XML操作,版本上没问题。
  • 如果你的XML里可能有多个同名Group/Item,记得调整XPath的筛选条件,比如用[position()]来指定位置,或者增加更精确的属性匹配。

内容的提问来源于stack exchange,提问作者GilliVilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:15:35