IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Value sur nom d'un élément XML [2008]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Par défaut Value sur nom d'un élément XML
    Bonjour à tous
    J'ai récupéré des données xml de MySQL que j'ai insérées dans une table SQLServer.
    Ces données sont de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <var>
     <variable>
      <name>
       <![CDATA[Variable1]]>
      </name>
      <value>
       <![CDATA[576695]]>
      </value>
     </variable>
     <variable>
      <name>
       <![CDATA[VariableToto]]>
      </name>
      <value>
       <![CDATA[576695]]>
      </value>
     </variable>
    <variable>
    Lorsque mon élément porte un "vrai" nom, je n'ai pas de problème pour récupérer sa valeur.
    Par contre là je cale...

    Je ne vois pas comment écrire ma requête pour récupérer la valeur du nom "Variable1" de mon élément "variable"

    Une idée ?

    Merci à tous

    Iza

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Par exemple, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT 	
    	name.value('.', 'NVARCHAR(MAX)')
    FROM LaTable
    CROSS APPLY LaColonneXML.nodes('/var/variable/name') AS T(name)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Par défaut
    Merci mais je ne récupère pas la value associée à mon <name> de variable.
    Avec ta requête qui fonctionne très bien en soi, je récupère tous les <name>.

    En fait je voudrais pouvoir récupérer : <![CDATA[576695]]>
    Quand je donne "Variable1" en paramètre.

    Merci !

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Par défaut
    J'ai fait ça, mais je n'arrive pas à filtrer et mon résultat est la concaténation de mon <name> et de ma <value>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Z.result.value('.','varchar(20)') as result
    from
    (
    SELECT T.C.query('.') as result
    FROM  maTable
    CROSS APPLY xmlVariable.nodes('/var/variable') T(C)
    ) as Z
    CROSS APPLY result.nodes('/variable/value') A(B)
    Je récupère ça :
    Variable1576695
    VariableToto576695

    Si je mets un where pour prendre Variable1, j'ai un joli message d'erreur

    where Z.result.value('(/variable/name','varchar(20)') = 'Variable1'

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Par défaut
    J'y suis arrivée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT Z.Id_task,Z.Id_service, A.B.query('.') as result,D.E.query('.') as result2,D.E.value('(/variable/value)[1]','varchar(20)')
    from
    (
    SELECT A.Id_task,A.Id_service,T.C.query('.') as result
    FROM  maTable A
    CROSS APPLY xmlVariable.nodes('/var/variable') T(C)
    ) as Z
    CROSS APPLY result.nodes('/variable/name') A(B)
    CROSS APPLY result.nodes('/variable/value') D(E)
    where A.B.value('(/variable/name)[1]','varchar(20)') = 'Variable1'

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Désolé, je n'avais pas bien compris votre demande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT 	
    	name.value('value[1]', 'NVARCHAR(MAX)') as ValeurVariable
    FROM LaTable
    CROSS APPLY LaColonneXML.nodes('/var/variable') AS T(name)
    WHERE name.value('name[1]', 'NVARCHAR(MAX)') = 'VariableToto'

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 77
    Par défaut
    Merci c'est encore plus rapide !

  8. #8
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Hello,

    ou encore quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    declare @variable varchar(50) = 'VariableToto';
     
    select
     columnXML.value('(/var/variable/name)[1]', 'varchar(50)')
    from LaTable
    where columnXML.exist('/var/variable/name[. = sql:variable("@variable")]') = 1
    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle sur liste d'éléments xml
    Par awalter1 dans le forum Général Python
    Réponses: 0
    Dernier message: 25/07/2011, 15h22
  2. [XSD]Contrainte d'unicité sur le nom d'un élément.
    Par Teocali dans le forum Valider
    Réponses: 4
    Dernier message: 28/01/2010, 13h49
  3. Réponses: 4
    Dernier message: 22/03/2008, 05h26
  4. Bizarrerie sur nom de table !
    Par Christophe Charron dans le forum Outils
    Réponses: 1
    Dernier message: 22/08/2005, 15h38
  5. [XSL] Recuperation du nom d'un élément
    Par Cpt.FLAM dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/04/2005, 15h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo