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 :

Requête XQuery avec champ de type XML


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de MigsFR
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut Requête XQuery avec champ de type XML
    Bonjour, j'ai un champ dans ma base qui est de type XML, celui ci contient des données du genre:
    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
    <sommaire>
        <node label="Sommaire" isBranch="true">
            <node label="Actus" isBranch="true">
                <node label="L'actualité en bref" />
                <node label="Agenda" />
            </node>
            <node label="Outils" isBranch="true">
                <node label="SonarJ et Maven surveillent votre architecture Java" />
            </node>
            <node label="Evénement" isBranch="true">
                <node label="TechDays 2008: c'est parti pour Windows Server 2008!" />
            </node>
            <node label="Projets" isBranch="true">
                <node label="Eclipse Process Framework Composer" />
            </node>
        </node>
    </sommaire>
    Je tente de faire une recherche sur l'attribut label mais ma requête ne me retourne qu'une seule ligne, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDDocument FROM Document WHERE Doc_Sommaire.exist('/sommaire/node//node[contains(@label, \"Actu\")]') =1
    Pourquoi? J'ai pourtant plusieurs lignes dans ma base dont le champ Doc_Sommaire contient la valeur "Actu" dans ses attributs label

    Merci pour votre aide!

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    pas de raison que ça ne marche pas (à part les \ qui ne sont pas supportés). Attention à une chose : l'opérateur contains en XQuery effectue une comparaison sensible à la casse (tout XQuery est case-sensitive).

    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
    20
    21
    22
    DECLARE @x XML
     
    SET @x = '<sommaire>
        <node label="Sommaire" isBranch="true">
            <node label="Actus" isBranch="true">
                <node label="L''actualité en bref" />
                <node label="Agenda" />
            </node>
            <node label="Outils" isBranch="true">
                <node label="SonarJ et Maven surveillent votre architecture Java" />
            </node>
            <node label="Evénement" isBranch="true">
                <node label="TechDays 2008: c''est parti pour Windows Server 2008!" />
            </node>
            <node label="Projets" isBranch="true">
                <node label="Eclipse Process Framework Composer" />
            </node>
        </node>
    </sommaire>'
     
    SELECT @x.exist('/sommaire/node//node[contains(@label, "Agenda")]')
    SELECT @x.exist('/sommaire/node//node[contains(@label, "agenda")]')
    La première requête retourne 1, la seconde, 0

  3. #3
    Membre averti Avatar de MigsFR
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    Merci pour ta réponse rudib, connais-tu un moyen pour que ça ne soit pas sensible à la casse?

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    malheureusement les fonctions upper_case et lower_case de XQuery ne sont pas supportées dans SQL Server 2005.
    Une solution est de récupérer les valeurs par un .value(), et tester ensuite avec un LIKE.

  5. #5
    Membre averti Avatar de MigsFR
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2008
    Messages : 54
    Par défaut
    Ah mince c'est bête ça! Pourtant la page suivante laisse entendre que c'est possible avec SQL Server 2008: http://msdn.microsoft.com/fr-fr/libr...(SQL.100).aspx

    En tout cas merci beaucoup pour ton aide!

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

Discussions similaires

  1. [SQL Serveur 2005] Requête sur un champ de type XML
    Par Cyrilange dans le forum Développement
    Réponses: 3
    Dernier message: 23/06/2008, 07h15
  2. Réponses: 1
    Dernier message: 25/09/2006, 10h18
  3. Requête UNION avec champ Oui/non
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 01/08/2006, 08h36
  4. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 16h26
  5. Champs de type XML dans une base de données
    Par Flocodoupoil dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/07/2004, 18h57

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