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

T-SQL中如何提取嵌套XML节点,获取所有Serial对应的数据行?

问题原因

你当前的查询仅在Product节点层级拆分XML,每个Product对应1行结果,value()方法中加[1]是强制取该Product下第一个Serial节点的字段值,自然漏掉了ProductCode=100下的第二个Serial记录。

解决方案

调整nodes()方法的路径到Serial节点层级,按Serial拆分数据即可,有两种常用写法:

写法1:直接定位到Serial节点拆分

SELECT
    SerialNode.value('../../@ProductCode','varchar(50)') AS ProductCode
    ,SerialNode.value('(YearNumber)[1]','int') AS YearNumber
    ,SerialNode.value('(SerialNumbers)[1]','nvarchar(max)') AS SerialNumbers
FROM
@Products_XML.nodes('/Products/Product/Serilas/Serial')AS TEMPTABLE(SerialNode)

写法2:分层拆分,可读性更高

SELECT
    Product.value('@ProductCode','varchar(50)') AS ProductCode
    ,SerialNode.value('(YearNumber)[1]','int') AS YearNumber
    ,SerialNode.value('(SerialNumbers)[1]','nvarchar(max)') AS SerialNumbers
FROM
@Products_XML.nodes('/Products/Product')AS TEMPTABLE(Product)
CROSS APPLY Product.nodes('Serilas/Serial') AS SerialTbl(SerialNode)

最终查询结果

两种写法都会返回预期的3行数据:

ProductCode | YearNumber  | SerialNumbers
-----------------------------------------
100         | 2020        | 1,2,3,4,5
-----------------------------------------
100         | 2021        | 6,7,8,9,10
-----------------------------------------
200         | 2021        | 600

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:48:02