【问题标题】:T-SQL Move XML node without insert/deleteT-SQL 移动 XML 节点而不插入/删除
【发布时间】: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


【解决方案1】:

正如你要求我将我的评论作为答案:

不,没有……

.modify() 将允许每次调用进行一次更改。

根据实际的 XML 可以

  1. 粉碎并重建它或
  2. 尝试一些花哨的XQuery(但TSQL 的XQuery 对于构造的XML 非常有限......)

两者都不能通用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多