2016-03-14 3 views
1

Использование SQL Server 2012 sp1 Я не смог найти решение там, но я считаю, что его невозможно добавить блок xml в определенную позицию существующего столбца xml в Таблица. К примеру сказать, что мы имели tbTable.AnimalsXML что:sql xquery, чтобы добавить блок 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> 

Как одна вставка:

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

ответ

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

Awww спасибо, я использую первый и последний, и не к чему, но не знать об этом и после того, как в соответствии с [ссылка] https: // MSDN. microsoft.com/en-AU/library/ms175466.aspx – Skeezwiz

Смежные вопросы