Pour indiquer le singleton de votre chemin, utilisez cette syntaxe : (chemin)[n° de position] (ce qu'on appelle un prédicat de position). Exemple sur un attribut, avec recherche dans le chemin :
SELECT echiquier.value('(/echiquier/blancs/pieces/pion[@numero = "3"]/@position)[ 1]', 'char(2)')
FROM #partie
Pour
Passer des requêtes XQuery dans SQL Server (2)
![Passer des requêtes XQuery dans SQL Server (2) Passer des requêtes XQuery dans SQL Server (2)](https://www.itpro.fr/wp-content/uploads/2015/10/c812930b3b2a87ce5221752e8c8c782d.jpg)
un élément :
SELECT echiquier.value(‘(/echiquier/blancs/pieces/pion[@numero = "3"]/historique/ coup[@sequence = "1"]/source)[1]’, ‘char(2)’)
FROM #partie
Puisqu’il vous retourne une valeur, value() sera utile dans un SELECT. Pour un test dans une clause WHERE, préférez-lui exist(), les performances sont meilleures.
exist()
exist() vous permet, dans une clause WHERE, de tester une existence à l’aide d’une instruction XPath. Un bit vous est retourné. Test de valeur atomique :
SELECT echiquier.query(‘/echiquier/blancs/pieces/piece[@position = "B3"]’)
FROM #partie
WHERE echiquier.exist(‘/echiquier/blancs/pieces/piece[@position = "B3"]’) = 1
Exemple de recherche avec deux critères d’attribut :
SELECT echiquier.query(‘/echiquier/blancs/pieces/pion[@numero = "2"]’)
FROM #partie
WHERE echiquier.exist(‘/echiquier/blancs/pieces/pion[@numero = "2" and @position = "B3"]’) = 1
Autre syntaxe possible :
SELECT echiquier.query(‘/echiquier/blancs/pieces/pion[@numero = "2"]’)
FROM #partie WHERE echiquier.exist(‘/echiquier/blancs/pieces/pion[@numero = "2"][@position = "B3"]’) = 1
Présence d’un élément :
SELECT echiquier.query(‘/echiquier/blancs/pieces/roi’) FROM #partie WHERE echiquier.exist(‘/echiquier/blancs/pieces/roi’) = 1
nodes()
nodes() extrait des noeuds, créant pour chacun une ligne de résultat. À utiliser dans la clause FROM. Pour spécifier une colonne, vous devez utiliser l’opérateur CROSS APPLY avec cette syntaxe :
FROM table
CROSS APPLY colonnexml.nodes(‘XQuery’) as aliastable(aliascolonne)
Exemple avec une liste :
SELECT col.query(‘.’)
FROM #partie p
CROSS APPLY echiquier.nodes(‘(/echiquier/blancs/pieces/pion, /echiquier/blancs/ pieces/pion/historique/coup)’) tbl(col);
modify()
modify() vous permet d’appliquer une modification au contenu du document, en utilisant une extension créée par Microsoft au langage XQuery, nommée XML-DML.
Exemple :
UPDATE #partie
SET echiquier.modify(‘
replace value of (/echiquier/blancs/pieces/pion[@position = "C5"]/@position)[ 1]
with "pris!"’)
WHERE echiquier.exist(‘/echiquier/blancs/pieces/pion[@position = "C5"]’) = 1
SELECT echiquier.query(‘/echiquier/blancs/pieces/pion[@position = "pris!"]’)
FROM #partie
Téléchargez cette ressource
![Guide de Reporting Microsoft 365 & Microsoft Exchange](https://www.itpro.fr/wp-content/uploads/2023/06/Promodag-Reports-pour-Microsoft-Exchange-Solution-de-reporting-detaille-de-lutilisation-de-Microsoft-Exchange-2023-1.jpg)
Guide de Reporting Microsoft 365 & Microsoft Exchange
Comment bénéficier d’une vision unifiée de vos messageries, mieux protéger vos données sensibles, vous conformer plus aisément aux contraintes réglementaires et réduire votre empreinte carbone ? Découvrez la solution de reporting complet de l’utilisation de Microsoft Exchange, en mode on-premise ou dans le Cloud.