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

  1. #1
    Membre du Club 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
    Points : 46
    Points
    46
    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!
    Migs - Quand vient l'orgueil, vient aussi le mépris, mais la sagesse est avec les humbles.

  2. #2
    Expert confirmé
    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
    Points : 4 043
    Points
    4 043
    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
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre du Club 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
    Points : 46
    Points
    46
    Par défaut
    Merci pour ta réponse rudib, connais-tu un moyen pour que ça ne soit pas sensible à la casse?
    Migs - Quand vient l'orgueil, vient aussi le mépris, mais la sagesse est avec les humbles.

  4. #4
    Expert confirmé
    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
    Points : 4 043
    Points
    4 043
    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.
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Membre du Club 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
    Points : 46
    Points
    46
    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!
    Migs - Quand vient l'orgueil, vient aussi le mépris, mais la sagesse est avec les humbles.

+ 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, 08h15
  2. Réponses: 1
    Dernier message: 25/09/2006, 11h18
  3. Requête UNION avec champ Oui/non
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 01/08/2006, 09h36
  4. Probleme avec champ de type LONG
    Par Youby dans le forum Oracle
    Réponses: 11
    Dernier message: 17/01/2006, 17h26
  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, 19h57

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