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

如何用XML查询函数获取指定TypeId对应的ItemId(T-SQL游标场景)

精准获取XML中指定TypeId的ItemId值(保留游标逻辑)

核心问题定位

原脚本中edi_PIA_SA和edi_PIA_IN的.value()查询失效,是因为XPath表达式未精准匹配XML的层级结构,无法筛选出对应TypeId的目标节点。

修正后的T-SQL脚本

假设你的XML结构示例(可替换为实际数据)

<EDIData>
  <Products>
    <Product>
      <PIASegment>
        <TypeId>GTIN</TypeId>
        <ItemId>9876543210987</ItemId>
      </PIASegment>
      <PIASegment>
        <TypeId>SA</TypeId>
        <ItemId>SAPROD001</ItemId>
      </PIASegment>
      <PIASegment>
        <TypeId>IN</TypeId>
        <ItemId>INPROD001</ItemId>
      </PIASegment>
    </Product>
  </Products>
</EDIData>

带游标逻辑的修正脚本

DECLARE @InputXML XML = '<!-- 替换为你的实际XML内容 -->'

-- 声明游标
DECLARE ProductCursor CURSOR FOR
SELECT
    -- 原GTIN查询保留(若原XPath正确)
    prod.node.value('(PIASegment[TypeId="GTIN"]/ItemId)[1]', 'NVARCHAR(50)') AS GTIN,
    -- 修正SA类型的ItemId查询:精准筛选TypeId=SA的节点
    prod.node.value('(PIASegment[TypeId="SA"]/ItemId)[1]', 'NVARCHAR(50)') AS edi_PIA_SA,
    -- 修正IN类型的ItemId查询:精准筛选TypeId=IN的节点
    prod.node.value('(PIASegment[TypeId="IN"]/ItemId)[1]', 'NVARCHAR(50)') AS edi_PIA_IN
FROM @InputXML.nodes('/EDIData/Products/Product') AS prod(node)

-- 初始化变量
DECLARE @GTIN NVARCHAR(50), @SAItem NVARCHAR(50), @INItem NVARCHAR(50)

-- 打开游标并处理数据
OPEN ProductCursor
FETCH NEXT FROM ProductCursor INTO @GTIN, @SAItem, @INItem

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 这里添加你的业务逻辑(如插入表、打印输出等)
    PRINT CONCAT('GTIN: ', @GTIN, ' | SA编码: ', ISNULL(@SAItem, '无'), ' | IN编码: ', ISNULL(@INItem, '无'))

    FETCH NEXT FROM ProductCursor INTO @GTIN, @SAItem, @INItem
END

-- 清理游标
CLOSE ProductCursor
DEALLOCATE ProductCursor

关键修正说明

  • XPath条件筛选:使用PIASegment[TypeId="SA"]精准定位到TypeId子节点值为SA的PIASegment节点,再通过/ItemId获取对应的值
  • 节点索引[1]:添加[1]确保只返回第一个匹配的节点,避免XML中存在多个同类型节点时引发的查询错误
  • 适配实际XML结构:如果你的XML节点名称(如PIASegment)或层级路径不同,只需修改XPath中的节点前缀部分,核心的条件筛选逻辑保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:33:23