Bonjour,
Dans une application pour laquelle j'essaye de proposer des amélioration de performances j'ai trouver la requête suivante :
Je sais que la méthode value dans la clause where n'est pas performante et qu'il faut privilegier la methode exist, j'ai donc essayer de modifier les 3 prédicats avec mes maigres connaissances. Pour l'un d'eux ca fonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT COUNT(i.DevisID) FROM Devis as i WHERE ( i.Redacteur=176 OR ( UserAttr.value('(/root/ListeUserAttr/UserAttr[@Name="userCodeUtilisateurSignataire"]/part0)[1]', 'nvarchar(100)')='' AND UserAttr.value('(/root/ListeUserAttr/UserAttr[@Name="userCodeUtilisateurSignataire"]/part1)[1]', 'nvarchar(100)')='HCARIOU' AND UserAttr.value('(/root/ListeUserAttr/UserAttr[@Name="userCodeUtilisateurSignataire"]/part2)[1]', 'nvarchar(100)')='') ) AND ( (i.Etat='0') OR (i.Etat='2' AND i.Etat2='0'))
mais pour les 2 autres je n'arrive pas a trouver la syntaxe appropriée
Code : Sélectionner tout - Visualiser dans une fenêtre à part AND UserAttr.exist('/root/ListeUserAttr/UserAttr[@Name="userCodeUtilisateurSignataire"]/part1[(text()[1]) = "HCARIOU"]') = 1
Voici la structure tu champs XML tel que stocké en base (pour la partie qui nous intéresse pour cette requête) :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <root> <ListeUserAttr> <UserAttr Name="userCodeUtilisateurSignataire" Type="100"> <part0 /> <part1>HCARIOU</part1> <part2 /> </UserAttr> </ListeUserAttr> </root>
Est ce que vous pourriez m'aider a trouver les bons prédicats avec la méthode exist pour les valeurs vide de part0 et part2 ?
Merci pour votre aide.
Partager