如何在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
相关产品推荐
相关产品推荐

