> Tech > Passer des requêtes XQuery dans SQL Server (2)

Passer des requêtes XQuery dans SQL Server (2)

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

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)

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

Rapport mondial 2025 sur la réponse à incident

Rapport mondial 2025 sur la réponse à incident

Dans ce nouveau rapport, les experts de Palo Alto Networks, Unit 42 livrent la synthèse des attaques ayant le plus impacté l'activité des entreprises au niveau mondial. Quel est visage actuel de la réponse aux incidents ? Quelles sont les tendances majeures qui redessinent le champ des menaces ? Quels sont les défis auxquels doivent faire face les entreprises ? Découvrez les top priorités des équipes de sécurité en 2025.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010