J'essaye sans succès de créer une instruction modify() pour changer la valeur d'un attribut dans tous les éléments qui ont cette valeur d'attribut - jusqu'ici je peux seulement l'obtenir pour changer la valeur dans le premier élément apparié. J'ai créé un exemple ci-dessous de ce que j'ai à ce jour, que je suis en cours d'exécution dans SQL Server 2005:Comment remplacer la valeur d'attribut de * tous * les éléments correspondants par 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;
L'exécution de cette donne les résultats ci-dessous - seule la première instance de Phoenix Cardinals a été changé. Pouvez-vous s'il vous plaît m'aider avec l'instruction modify() correcte pour remplacer toutes les instances?
<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>
Merci!
Kevin
Bonjour Marc, je dois mettre à jour plusieurs nœuds dans la base de données. Est-il possible d'utiliser une instruction xml? ou j'ai besoin d'écrire une déclaration que vous avez expliquée ci-dessus pour tous les nœuds? – Radhi
@Radhi: pouvez-vous sélectionner tous ces nœuds dans le XML dans une seule instruction XPath? Si oui, vous pouvez les mettre à jour en une seule opération; sinon, vous avez besoin de plusieurs opérations "modifier" –