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

Microsoft SQL Server XML查询:如何获取指定Field节点的目标数据

SQL Server XML查询取值问题修正

原代码失效的核心原因

  • 节点路径与实际XML结构不匹配:文档中不存在ExtendedFields节点,三个目标值均位于Fields节点下的Field子元素内,每个子元素通过自身的name属性区分业务含义,并非独立挂载在父节点上的属性。
  • 节点定位规则错误:根节点MyFeed不属于代码中声明的urn:Thefeed-xsd命名空间,原nodes()函数的通配路径未和实际XML层级对齐,导致连基础的ConventionalValue等固定字段都无法正确关联取值。
  • 取值逻辑偏差:原代码尝试读取父节点的@Identifier、@IdentifierCode、@OwnerID属性,和实际存储结构完全不符——这三个值是对应Field元素的文本内容,不是节点属性。

修正后可正常提取目标值的代码

DECLARE @myDoc XML  
DECLARE @ProdID varchar(30)  

SET @myDoc = '<?xml version="1.0" encoding="UTF-8"?>
<MyFeed header="header value">
<f:TheFeed xmlns:f="urn:Thefeed-xsd">
<f:ConventionalValue>-100.681356</f:ConventionalValue>
<f:ReceiveXPercent>1.0</f:ReceiveXPercent>
<f:ReceiveXMonth>3</f:ReceiveXMonth>
<f:Fields>
  <f:Field calcrt="SW1" name="Identifier">ID_US</f:Field>
  <f:Field calcrt="SW5" name="IdentifierCode">US1</f:Field>
  <f:Field calcrt="SW10" name="OwnerID">John Smith</f:Field>
</f:Fields>
</f:TheFeed>
</MyFeed>';

WITH XMLNAMESPACES('urn:Thefeed-xsd' AS f)
SELECT 
    OgrRol.value('(f:ConventionalValue/text())[1]','nvarchar(50)') AS ConventionalValue,
    OgrRol.value('(f:ReceiveXPercent/text())[1]','nvarchar(50)') AS ReceiveXPercent,
    OgrRol.value('(f:ReceiveXMonth/text())[1]','nvarchar(50)') AS ReceiveXMonth,
    OgrRol.value('(f:Fields/f:Field[@name="Identifier"]/text())[1]','nvarchar(50)') AS Identifier,
    OgrRol.value('(f:Fields/f:Field[@name="IdentifierCode"]/text())[1]','nvarchar(50)') AS IdentifierCode,
    OgrRol.value('(f:Fields/f:Field[@name="OwnerID"]/text())[1]','nvarchar(50)') AS OwnerID
FROM 
    @myDoc.nodes('/MyFeed/f:TheFeed') A(ogrRol)

关键调整说明

  • 命名空间规则优化:将原默认命名空间写法替换为显式绑定命名空间前缀,避免无命名空间的MyFeed节点被默认命名空间规则误匹配,降低路径歧义。
  • 节点定位精准化:将原通配路径改为和实际XML层级完全对齐的/MyFeed/f:TheFeed,确保取值上下文能正确定位。
  • 目标字段取值逻辑重构:匹配实际存储结构,从f:Fields节点下通过@name属性筛选对应业务的f:Field元素,直接提取节点文本,即可得到预期的ID_US、US1、John Smith三个目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 13:27:05