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

MS SQL Server Discussion :

Tester existence d'un noeud dans un champ xml


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Tester existence d'un noeud dans un champ xml
    Bonjour

    Je dois extraire des info d'une base de donnée contenant des champ XML (l'horreur a mon avis)

    Pour recuperer un nom d'utilisateur j'ai le select suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select
    Basket.ExtraInfo.value('(//Plugin[@name=''ClientAVendorInfoPlugin'']//Property[@key=''Name''])[1]','nvarchar(200)') AS 'Seller'
    From Ventes
    Mais dans certains cas le nom du noeud est different

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select
    Basket.ExtraInfo.value('(//Plugin[@name=''ClientABCVendorInfoPlugin'']//Property[@key=''Name''])[1]','nvarchar(200)') AS 'Seller'
    From Ventes
    J'aimerais donc faire un case qui teste l'existence du noeud mais je n'en trouve pas la syntaxe

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux utiliser la méthode Exist(). Ca retourne un bit (1 si le noeud existe, sinon 0).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    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,

    Ou directement un COALESCE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT COALESCE(
    Basket.ExtraInfo.value('(//Plugin[@name=''ClientAVendorInfoPlugin'']//Property[@key=''Name''])[1]','nvarchar(200)')
    ,
    Basket.ExtraInfo.value('(//Plugin[@name=''ClientABCVendorInfoPlugin'']//Property[@key=''Name''])[1]','nvarchar(200)')
    ) AS 'Seller'
    FROM Ventes

  4. #4
    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
    Je pense qu'on peut avoir encore une autre solution.

    Tu aurais éventuellement un bout de ton xml ?

    ++

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci MikeDavem

    Voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <PluginBag>
      <Plugin name="MobistarVendorInfoPlugin">
        <Properties>
          <Property key="Name">Tielt Telecom</Property>
        </Properties>
        <Lists />
      </Plugin>
      <Plugin name="OwnerInfoPlugin">
        <Properties />
        <Lists />
      </Plugin>
    </PluginBag>

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci MikeDavem

    Voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <PluginBag>
      <Plugin name="MobistarVendorInfoPlugin">
        <Properties>
          <Property key="Name">Tielt Telecom</Property>
        </Properties>
        <Lists />
      </Plugin>
      <Plugin name="OwnerInfoPlugin">
        <Properties />
        <Lists />
      </Plugin>
    </PluginBag>

  7. #7
    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
    Yop,

    Voilà perso ce que je ferais (à l'erreur de syntaxe près) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T.x.value('(.//Property[@KEY="Name"])[1]', 'NVARCHAR(200)') AS 'Seller'
    FROM Ventes
    CROSS APPLY Ventes.ExtraInfo.nodes('//Plugin[@name="MobistarVendorInfoPlugin" or @name="OwnerInfoPlugin"]') AS T(x)
    Après je ne sais pas si tu as une liste définie de "Plugin" ou indéterminée ...

    ++

Discussions similaires

  1. Tester l'existence d'un noeud dans un fichier xml
    Par tunwim dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2013, 13h32
  2. [MySQL] Vérifier l'existance d'une valeur dans un champ
    Par k3vin dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/05/2010, 22h29
  3. Tester l'existence d'un noeud dans un fichier xml
    Par andromeda dans le forum C#
    Réponses: 2
    Dernier message: 07/02/2009, 09h29
  4. tester existence d'un élément dans champ TCD
    Par NATOU2 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/10/2008, 16h20
  5. Réponses: 2
    Dernier message: 03/07/2008, 12h38

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