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 :

[SQL Serveur 2005] Requête sur un champ de type XML


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut [SQL Serveur 2005] Requête sur un champ de type XML
    Bonjour,

    J'ai une table "Reports" qui contient un champ de type XML "reportXml".
    Le contenu de ce champ est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <RegistreDeSecurite>
    <Done>true</Done>
    <IsValid>false</IsValid>
    </RegistreDeSecurite>
    Je fais une requête pour obtenir les lignes qui ont pour valeur Done=false et IsValid=false.

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT        pkReport, fkCompany, reportXml
    FROM          Reports
    WHERE        (fkCompany = @pkCompany) AND ((reportXml.exist('/ReportRegistreSecurite/IsValid/value ="false"') =1) 
    AND (reportXml.exist('/ReportRegistreSecurite/Done/value ="false"')=1))
    Malgré que la valeur de ma ligne soit Done=true, la ligne est quand même retournée. Pourquoi ? Merci de me dire où j'ai fait une erreur.

  2. #2
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut
    J'ai contourné le problème en utilisant value au lieu d'exist de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT        pkReport, fkCompany, reportXml
    FROM          Reports
    WHERE        (fkCompany = @pkCompany)  AND reportXml.value('/ReportRegistreSecurite[1]/Done[1]','nvarchar(5)')=@IsDone AND reportXml.value('/ReportRegistreSecurite[1]/IsValid[1]','nvarchar(5)')=@IsValid
    Cependant j'aurais préféré utilisé exist qui est plus rapide.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    moi aussi, j'aurais utilisé value! L'important, c'est d'avoir trouvé une solution viable et qui ne plombe pas trop les performances. Pour info, qu'est ce qui vous dit que exist soit plus rapide ?

  4. #4
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut
    En effet, comme dit le dicton : "Peu importe la couleur du chat du moment qu'on attrape la souris."

    D'après ce que j'ai lu sur différent site, exist serait plus rapide que value.
    Cela me parait logique car d'un coté exist génére une valeur boolean 0 ou 1 alors que de l'autre value va chercher une chaîne de caractère de longueur variable et la retourne.
    Ceci étant dit, la différence ne doit pas être énorme, et value sera très bien pour ce que je veux faire

Discussions similaires

  1. [SQL SERVEUR 2005] Requête
    Par foxrol dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/04/2011, 11h04
  2. Réponses: 2
    Dernier message: 18/11/2010, 09h54
  3. requête sur un champ au format xml
    Par DiverSIG dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/11/2009, 13h52
  4. Requête XQuery avec champ de type XML
    Par MigsFR dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/07/2008, 10h10
  5. Eviter les doublons sur un champ SQL Serveur 2005
    Par crashyear dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/12/2006, 08h02

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