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

如何在SQL Server 2022中提取XML类型中的变量值?

解决SQL Server 2022中XML属性提取问题

问题原因分析

你的代码未能正确提取值,核心问题有两点:

  1. XPath语法错误:XML中的Name、Variable、Value是<Variable>元素的属性,而非子元素,不能用Name[1]这类子元素查询,需改用@Name语法获取属性值。
  2. 节点定位错误:nodes()方法应定位到/Variables/Variable(每个变量元素),而非/Variables(父容器),否则无法正确遍历单个变量。

修正后的SQL代码

-- 创建临时表存储测试数据
select 'Name1' [Name]
, '&lt;Variables&gt;&lt;Variable Name=&quot;Menge [Stk]&quot; Variable=&quot;N&quot; Value=&quot;1&quot; ClientDoc=&quot;0&quot; CDchangeable=&quot;0&quot; ValueChangeAble=&quot;0&quot; OnProdPaper=&quot;0&quot; ExChangeEuro=&quot;0&quot; AVSVariable=&quot;0&quot;/&gt;&lt;/Variables&gt;' [VariablesXML]
into #TempTable;

-- 正确提取XML中的属性值
select 
    T.[Name]
    , CAST(T.VariablesXML as XML) [VariablesXML]
    , X.Var.value('@Name', 'nvarchar(max)') [VariableName]
    , X.Var.value('@Variable', 'nvarchar(max)') [VariableCode]
    , X.Var.value('@Value', 'nvarchar(max)') [VariableValue]
from #TempTable T
outer apply CAST(T.VariablesXML as XML).nodes('/Variables/Variable') as X(Var);

-- 清理临时表
drop table #TempTable;

关键改动说明

  • 直接在outer apply中转换XML并定位到/Variables/Variable,避免冗余的CTE和表连接
  • 使用@属性名语法提取<Variable>元素的属性值,对应XML中的Name、Variable、Value属性
  • 重命名结果列(如VariableName)避免与原表的Name列冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:52:53