使用 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() 并发现了这个问题,我们如何在 sql 中使用以下命令完成它:
update tbTable set AnimalsXML.modify('
insert
sql:variable("@var")
as "specific position"
into (/Animals)[1]')
您可以使用
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]
')