Le type de données XML, introduit par SQL Server 2005, agit comme une classe, comportant des méthodes qu'on peut appliquer au contenu de la variable ou de la colonne définie sur ce type. Il supporte cinq méthodes, permettant de manipuler le contenu avec beaucoup de flexibilité.
Passer des requêtes XQuery dans SQL Server
1. query(), applique au document toute la panoplie du langage XQuery, et retourne un fragment XML ;
2. value(), extrait un item (un singleton) du document XML, et le convertit dans un type SQL défini en paramètre ;
3. exist(), recherche l’existence d’un critère ;
4. node(), retourne chaque noeud correspondant au chemin XPath exprimé en une nouvelle ligne. Vous utilisez node() dans la clause FROM pour retourner un jeu de résultats composé des noeuds extraits ;
5. modify(), permet d’insérer, modifier et supprimer un noeud.
query()
query() permet d’appliquer toute la richesse de la syntaxe XQuery pour extraire un nouveau fragment XML du document original. Nous en avons déjà vu des exemples. Voici quelques applications pratiques, montrant les possibilités du langage.
Vous pouvez générer un nouveau fragment XML à la volée, simplement en écrivant des chevrons en littéraux dans votre return, ou dans n’importe quelle expression de retour XQuery. Si vous voulez interpoler le résultat d’une expression, encadrez-la par {}.
SELECT echiquier.query(‘<ouEstLeRoiBlanc>{/echiquier/blancs/pieces/roi/@position}</ ouEstLeRoiBlanc>’)
FROM #partie
Vous noterez en essayant ce code, que le résultat retourne la position en attribut. Ici, /echiquier/blancs/pieces/ roi/@position retourne un noeud, qui est un attribut. Or, si vous voulez le « mapper » en élément, vous avez besoin d’extraire la valeur atomique du noeud position, par un processus qu’on appelle atomisation. La fonction d’atomisation est data() :
SELECT echiquier.query(‘<ouEstLeRoiBlanc>{data(/echiquier/blancs/pieces/roi/ @position)}</ouEstLeRoiBlanc>’)
FROM #partie
Dans certains cas, XQuery atomise le résultat par défaut (par exemple en paramètre de fonctions). Parfois, comme ici, nous devons le faire explicitement. Voyons également l’utilisation des agrégations (sum, min, max, count, avg). Ici un count() :
SELECT echiquier.query(‘<coupsBlancs>{ count(/echiquier/blancs//historique/coup) }</coupsBlancs>’)
FROM #partie
Vous pouvez au besoin transtyper vos valeurs atomiques en types XML (du namespace xs), en utilisant la syntaxe « cast as type? ». Attention, vous ne pouvez transtyper que des singletons :
SELECT echiquier.query(‘
(/echiquier/blancs/pieces/pion[@numero = "3"]/historique/coup[@sequence = "1"]/source)[1] cast as xs:string?’)
FROM #partie
Vous pouvez également insérer des valeurs de colonne ou de variable du jeu de résultat relationnel « externe » au type xml, en utilisant les fonctions sql:column() et sql:variable()
SELECT echiquier.query(‘<PartieId>{sql:column("PartieId")}</PartieId>’)
FROM #partie
Attention, certains types comme datetime et smalldatetime ne sont pas supportés, vous devez les convertir avant de les utiliser dans XQuery. value() value() permet d’extraire une valeur de noeud, et de la retourner dans un type de données SQL, spécifié en paramètre. Le chemin doit permettre de retourner une seule valeur.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Pourquoi la souveraineté des données relève du contrôle et non de la géographie
- L’incident OpenAI–Hugging Face n’est pas la révolution que vous imaginez
- Pourquoi les PME ne peuvent plus se permettre de négliger la sécurité de leur parc d’imprimantes
- Ransomware : les identités compromises à l’origine de 79% des attaques
Articles les + lus
Couchbase lance AI Data Plane pour industrialiser l’IA agentique
Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
Computex 2026 : 5 signaux forts à retenir
La chaîne d’approvisionnement, point de rupture récurent du SI
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
À la une de la chaîne Tech
- Couchbase lance AI Data Plane pour industrialiser l’IA agentique
- Windows 11 : Microsoft généralise le point-in-time restore pour accélérer la remise en service des PC
- Computex 2026 : 5 signaux forts à retenir
- La chaîne d’approvisionnement, point de rupture récurent du SI
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
