Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2011, 17h50   #1
Membre actif
 
Inscription : mai 2004
Messages : 283
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 283
Points : 154
Points : 154
Envoyer un message via MSN à cosmos38240
Par défaut Recuperer des informations en xml

Bonjour,

J'essaye de recuperer des informations dans un champ xml.
Après avoir lu les explications je n'y arrive pas avec l'exemple suivant :

au niveau de la base de donnée en sql serveur 2005 j'ai une table xml avec une colonne qui contient des données xml de ce type :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<description>test 2</description>
<item name="item1">
<property name="nom1">test1</property>
<property name="color">#1E90FF</property>
<property name="div">2</property></item>
<item name="item2">
<property name="nom1">test1</property>
<property name="color">#1E90FF</property>
<property name="div">2</property></item>
<item name="item3">
<property name="nom3">test1</property>
<property name="color">#000000</property>
<property name="div">2</property></item>
Je souhaiterais en une requete recuperer les codes couleurs dont le nom est egal à "nom1" et "nom3".
Est ce possible avec ce type de structure xml ?

Merci
cosmos38240 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 18h27   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Postez votre XML bien formé SVP.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 18h30   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Une requête comme celle-ci, qui doit surement être optimisable :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
SELECT 
	prop.value('.', 'VARCHAR(50)') AS CodeCouleur
FROM T_XML
CROSS APPLY ColonneXML.nodes('item') I(item)
CROSS APPLY item.nodes('property') P(prop)
WHERE EXISTS(
	SELECT *
	FROM item.nodes('property') X(y)
	WHERE y.value('@name[1]', 'VARCHAR(50)') IN ('nom1', 'nom3')
)
AND prop.value('@name[1]', 'VARCHAR(50)') = 'color'
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 20h17   #4
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonsoir,

Une autre :

Code :
1
2
3
4
SELECT C.value('(./text())[1]', 'varchar(50)')
FROM T_XML
CROSS APPLY col.nodes('//property') AS R(C)
WHERE C.exist('.[@name="nom1" or @name="nom3"]') = 1
++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h53.


 
 
 
 
Partenaires

Hébergement Web