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

如何修改T-SQL的OpenXml语句使每个Alias单独成一条记录?

解决OpenXML提取XML中Alias为单独记录的问题

首先,咱们来分析下你当前查询的问题:你的XPath指向的是<Aliases>节点,然后用'.'提取该节点的文本内容,这种写法没有正确映射到每个单独的<Alias>子节点,导致结果被意外拼接在一起。

要让每个Alias作为单独的记录返回,有两种简单的修改方式:

方法1:调整XPath直接指向每个节点

把XPath路径改为'/Entity/Aliases/Alias',这样OPENXML会遍历所有的<Alias>节点,每个节点对应一行记录:

SELECT Alias 
FROM OPENXML(@XML, '/Entity/Aliases/Alias', 2) 
WITH ( Alias varchar(255) '.' )

方法2:保留原XPath,修改WITH子句的节点映射

如果你想保持XPath指向<Aliases>节点,可以在WITH子句里明确指定提取<Alias>子节点的内容:

SELECT Alias 
FROM OPENXML(@XML, '/Entity/Aliases', 2) 
WITH ( Alias varchar(255) 'Alias' )

额外推荐:使用更现代的XQuery方法

OPENXML是比较旧的XML处理方式,现在SQL Server更推荐使用XQuery的nodes()方法,它不需要额外的内存准备/清理操作(比如sp_xml_preparedocument和sp_xml_removedocument),代码更简洁安全:

SELECT x.value('.', 'varchar(255)') AS Alias
FROM @XML.nodes('/Entity/Aliases/Alias') AS t(x)

以上三种方式都能让你得到每行一个Alias的结果:

  • TEST 1
  • TEST 2
  • TEST 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:48