Clause Where sur champs XML, passer de la méthode value à la méthode exist
Bonjour,
Dans une application pour laquelle j'essaye de proposer des amélioration de performances j'ai trouver la requête suivante :
Code:
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')) |
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:
AND UserAttr.exist('/root/ListeUserAttr/UserAttr[@Name="userCodeUtilisateurSignataire"]/part1[(text()[1]) = "HCARIOU"]') = 1
mais pour les 2 autres je n'arrive pas a trouver la syntaxe appropriée
Voici la structure tu champs XML tel que stocké en base (pour la partie qui nous intéresse pour cette requête) :
Code:
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.