【问题标题】:sql xquery to add xml block into specific positionsql xquery 将 xml 块添加到特定位置
【发布时间】:2016-06-28 23:48:05
【问题描述】:

使用 sql server 2012 sp1 我无法找到解决方案,但我相信不可能将 xml 块添加到表中现有 xml 列的特定位置。例如,假设我们有tbTable.AnimalsXML,即:

<Animals>
  <Animal name="Dog">
    <Enclosure id="Default">
      <Value>xyz</Value>
    </Enclosure>
  </Animal>
  <Animal name="Cat">
    <Enclosure id="Default">
      <Value>xyz</Value>
    </Enclosure>
  </Animal>
  <Animal name="Bird">
    <Enclosure id="Default">
      <Value>xyz</Value>
    </Enclosure>
  </Animal>
  <Animal name="Sheep">
    <Enclosure id="Default">
      <Value>xyz</Value>
    </Enclosure>
  </Animal>
</Animals>

如何插入:

<Animal name="Goat">
    <Enclosure id="Default">
      <Value>xyz</Value>
    </Enclosure>
</Animal>

在猫和鸟块之间?

尝试position() 并找到了这个problem,我们如何在sql 中使用:

update tbTable set AnimalsXML.modify('
            insert
                sql:variable("@var")
            as "specific position"
            into (/Animals)[1]')

【问题讨论】:

    标签: sql xml sql-server-2012 xquery sqlxml


    【解决方案1】:

    您可以使用insert ... after ... 构造在某些现有元素之后插入新元素。下面的示例在现有 &lt;Animal name="Cat"&gt; 元素之后插入新元素:

    declare @data XML = '<Animals>
      <Animal name="Dog">
        <Enclosure id="Default">
          <Value>xyz</Value>
        </Enclosure>
      </Animal>
      <Animal name="Cat">
        <Enclosure id="Default">
          <Value>xyz</Value>
        </Enclosure>
      </Animal>
      <Animal name="Bird">
        <Enclosure id="Default">
          <Value>xyz</Value>
        </Enclosure>
      </Animal>
      <Animal name="Sheep">
        <Enclosure id="Default">
          <Value>xyz</Value>
        </Enclosure>
      </Animal>
    </Animals>'
    
    set @data.modify('
    insert 
        <Animal name="Goat">
            <Enclosure id="Default">
              <Value>xyz</Value>
            </Enclosure>
        </Animal>
    after (/Animals/Animal[@name="Cat"])[1]
    ')
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多