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

如何在T-SQL中通过内联ID查询XML并提取指定ID的XML值

在T-SQL中根据ID查询XML并获取对应Value值

嘿,这个需求在T-SQL里实现起来很简单,我给你两种实用的方案,按需选择就行:

方案1:直接用XQuery的value()方法(单值查询)

如果只是想单独获取某一个ID对应的Value,比如ID=4或者ID=5,用value()方法最直接。假设你的XML数据存储在表YourTable的XmlData字段里,示例代码如下:

-- 查询ID=4对应的Value
SELECT 
    XmlData.value('(/Attributes/CustomerAttribute[@ID="4"]/CustomerAttributeValue/Value/text())[1]', 'NVARCHAR(MAX)') AS AttributeValue
FROM YourTable;

-- 查询ID=5对应的Value
SELECT 
    XmlData.value('(/Attributes/CustomerAttribute[@ID="5"]/CustomerAttributeValue/Value/text())[1]', 'NVARCHAR(MAX)') AS AttributeValue
FROM YourTable;

代码解释:

  • (/Attributes/CustomerAttribute[@ID="4"]):定位到ID为4的CustomerAttribute节点
  • /CustomerAttributeValue/Value/text():深入到对应的Value节点,提取文本内容
  • [1]:确保只返回第一个匹配的结果(避免XML结构异常时返回多行)
  • NVARCHAR(MAX):指定返回值的数据类型,你可以根据实际需求改成INT、VARCHAR(50)等

方案2:用nodes()方法批量查询(多ID/行级结果)

如果需要一次性提取多个ID对应的Value,或者把每个属性拆成单独的行记录,就用nodes()方法来拆分XML节点:

SELECT 
    -- 提取ID属性值
    CustomerAttribute.value('@ID', 'INT') AS AttributeID,
    -- 提取对应的Value值
    CustomerAttribute.value('(CustomerAttributeValue/Value/text())[1]', 'NVARCHAR(MAX)') AS AttributeValue
FROM YourTable
-- 拆分所有CustomerAttribute节点
CROSS APPLY XmlData.nodes('/Attributes/CustomerAttribute') AS CA(CustomerAttribute)
-- 可选:筛选特定ID
WHERE CustomerAttribute.value('@ID', 'INT') IN (4,5);

这种方法会把每个CustomerAttribute节点转换成一行数据,方便你批量处理或者筛选多个ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:21:22