Bonjour,

Dans une application pour laquelle j'essaye de proposer des amélioration de performances j'ai trouver la requête suivante :
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'))
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
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 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.