【发布时间】:2018-09-27 15:51:10
【问题描述】:
使用 T-SQL,是否可以通过一条指令移动 XML 节点,而不必执行 insert 后跟 delete?
示例 XML...
DECLARE @XML XML = '<data><a></a><b></b></data>'
所需的 XML...
DECLARE @XML XML = '<data><a><b></b></a></data>'
两步解决方案...
SET @XML.modify('insert (/data/b) as last into (/data/a)[1]')
SET @XML.modify('delete (/data/b)')
有没有一步到位的解决方案?
【问题讨论】:
-
我很困惑,为什么不先正确插入呢?正确的意思是你想要的方式。
-
对不起@scsimon,但这是一个严肃的问题吗?我不是在构建“示例”XML……我正在转换它。如果我一开始就建造它,你认为我会专门把它放在错误的位置然后移动它吗??
-
您的示例非常简化(这很好),但是您的 real-life XML 在结构上是否相同(移动一个 level-2元素合并到一个 level-1 元素中)?或者您是否需要一个从这里到那里的完全成熟的通用移动魔法?
-
@Shnugo - 这有关系吗?单个 1 级元素将移动到单个 3 级元素,但 AFAIK 不应该对问题/答案产生任何影响。老实说,我的两步解决方案很有效......如果有一个单一的
.modify命令可以做到这一点,我完全感兴趣(为了一点点的性能提升,但主要是为了个人知识) -
@scsimon - 明白。我已经做了 20 多年的开发人员,所以我知道这样的问题。我已经数不清有多少次我开始写问题了/跨度>
标签: xml sql-server-2008 tsql xpath xquery