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

如何在SQL中遍历多个XML属性并写入对应数据表

XML属性动态遍历写入SQL表实现方案

不需要提前枚举固定属性名,通过XPath通配符即可覆盖任意数量的属性,无遗漏。

SQL Server 可用实现

直接复用下面的代码,替换成你自己的表名、XML内容即可:

-- 单份XML解析写入示例
DECLARE @source_xml XML = '
<Summary>
  <MyAttributes AT001="ABC" AT002="123" AT003="456" AT004="DEF" />
</Summary>
'

INSERT INTO 你的目标表名 (Name, Value)
SELECT
    属性节点.value('local-name(.)', 'NVARCHAR(100)') AS Name,
    属性节点.value('.', 'NVARCHAR(MAX)') AS Value
FROM @source_xml.nodes('/Summary/MyAttributes/@*') AS 属性映射表(属性节点)

关键逻辑说明

  • XPath路径里的@*是属性通配符,会自动匹配MyAttributes节点下的所有属性,不管属性名是什么、总共有多少个,都会被遍历到,不需要手动写死AT001、AT002这类固定字段
  • local-name(.)函数用来提取当前遍历到的属性的名称,对应Name字段
  • 取值参数里的.代表取当前属性节点的内容,对应Value字段

如果你的XML是存储在业务表的字段中,需要批量解析,可以用CROSS APPLY关联处理:

-- 批量解析业务表中存储的XML字段示例
INSERT INTO 你的目标表名 (Name, Value)
SELECT
    属性节点.value('local-name(.)', 'NVARCHAR(100)') AS Name,
    属性节点.value('.', 'NVARCHAR(MAX)') AS Value
FROM 存储XML的业务表 t
CROSS APPLY t.XML字段名.nodes('/Summary/MyAttributes/@*') AS 属性映射表(属性节点)
-- 可按需加筛选条件
-- WHERE t.业务字段 = 'xxx'

适配说明

  • 字段类型、长度可以根据实际业务调整,示例中用NVARCHAR(100)存属性名、NVARCHAR(MAX)存属性值是通用配置,可避免内容截断
  • 如果XML结构有调整,只需要修改nodes()方法里的XPath路径即可,属性遍历的通配逻辑保持不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:54:23