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

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

Tech - Par iTPro - 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 gratuitement cette ressource

Cloud hybride : 4 Stratégies de réussite

Cloud hybride : 4 Stratégies de réussite

Que vous souhaitiez développer ou renforcer votre approche du Cloud hybride, évaluer les meilleures options ou encore enrichir votre processus de prise de décision, découvrez dans ce Guide, 4 stratégies de Cloud hybride alignées avec vos objectifs business & technologiques.

Tech - Par iTPro - Publié le 24 juin 2010