Isoler une valeur dans une colonne XML d’une table Microsoft SQL peut être très utile.
Dans cet article, nous vous donnons un exemple de récupération d’une valeur dans une structure XML.

Ci-dessous la structure XML stockée dans une table d’une base de données Microsoft SQL :

<?xml version="1.0"?>
<root>
<element attribute="Nom">Nom de mon Fichier</element>
</root>

Le but étant de récupérer la valeur « Nom de mon Ficher », la requête doit être capable d’isoler le niveau de structure XML en identifiant l’élément et l’attribut.

 

Requête Microsoft SQL (mono valeur)

Ci-dessous le format de la requête Microsoft SQL nécessaire :

with resultat as
(
SELECT
a.b.value('.','varchar(max)') AS Nom

FROM MaTableSQL
--/root/element représente la structure XML à parcourir
-- @attribute="Nom" représente le nom de l'attribut à rechercher
CROSS APPLY Data.nodes('/root/element[@attribute="Nom"]')a(b)
)
SELECT * from resultat
Résultat
Nom                |
-------------------|
Nom de mon Fichier |

 

Vous pouvez adapter cette requête pour isoler autant de valeur que vous souhaitez.
Un exemple ci-dessous avec des valeurs multiples à récupérer à partir d’une structure XML :

<?xml version="1.0"?>
 <root>
 <element attribute="Nom">Nom de mon Fichier</element>
 <element attribute="Extension">JPG</element>
 </root>

 

Requête Microsoft SQL (multi-valeurs)

Ci-dessous le format de la requête Microsoft SQL nécessaire :

with resultat as
 (
SELECT
a.b.value('.','varchar(max)') AS Noms,
c.d.value('.','varchar(max)') AS Extensions

FROM MaTableSQL
CROSS APPLY Data.nodes('/root/element[@attribute="Nom"]')a(b)
CROSS APPLY Data.nodes('/root/element[@attribute="Extension"]')c(d)
)
SELECT * from resultat
Résultat
Noms               | Extensions  |
-------------------|-------------|
Nom de mon Fichier |JPG          |

Laisser un commentaire

Votre adresse email ne sera pas publiée. * Champs requis

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>