sql xquery将xml块添加到特定位置

时间:2016-03-14 03:27:14

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

使用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>
在Cat和Bird之间?

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

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

1 个答案:

答案 0 :(得分:3)

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

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]
')