Я пытаюсь без везения создать инструкцию modify(), чтобы изменить значение атрибута во всех элементах, имеющих это значение атрибута, - пока я могу получить его только для изменения значения в первом совпадающем элементе. Я создал пример ниже того, что я до сих пор, что я бегу в SQL Server 2005:Как заменить значение атрибута * всех * соответствующих элементов с помощью XQuery?
DECLARE @x XML
SELECT @x = '
<FootballApparel>
<Item Team="Phoenix Cardinals" Type="Hat" Cost="$14.99" />
<Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" />
<Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" />
<Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" />
<Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" />
<Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" />
</FootballApparel>
';
SET @x.modify('
replace value of
(/FootballApparel/Item[@Team="Phoenix Cardinals"]/@Team)[1]
with "Arizona Cardinals"
');
SELECT @x;
Запуск это дает приведенные ниже результаты - только первый экземпляр Phoenix кардиналами был изменен.
<FootballApparel>
<Item Team="Arizona Cardinals" Type="Hat" Cost="$14.99" />
<Item Team="Indianapolis Colts" Type="Hat" Cost="$14.99" />
<Item Team="Cincinnati Bengals" Type="Hat" Cost="$14.99" />
<Item Team="Phoenix Cardinals" Type="Shirt" Cost="$21.99" />
<Item Team="Indianapolis Colts" Type="Shirt" Cost="$21.99" />
<Item Team="Cincinnati Bengals" Type="Shirt" Cost="$21.99" />
</FootballApparel>
Не могли бы вы помочь мне с правильной инструкцией modify() для замены всех экземпляров?
Спасибо!
Kevin
Привет, Марк, мне нужно обновить несколько узлов в базе данных. так можно ли с помощью одной инструкции xml? или мне нужно написать заявление, которое вы объяснили выше для всех узлов? – Radhi
@Radhi: можете ли вы выбрать все эти узлы в XML в одном выражении XPath? Если да, вы можете обновить их за одну операцию; в противном случае вам потребуется несколько операций «изменить» –