Eh bien, votre expression XPath ici est le "coupable":
query('//branch')
Cela dit :sélectionnez tout <branch> nœuds de l'ensemble du document. Il fait juste ce que vous lui dites de faire, vraiment...
Quel est le problème avec cette requête ? ?
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Cela récupérerait tous les <branch> sous-nœuds pour le <book> nœud qui a type="SF" comme attribut....
Qu'essayez-vous de réaliser avec votre query() , exist() et value() tout dans la même déclaration ?? Très probablement, cela peut être fait beaucoup plus facilement....
Aussi :je pense que vous interprétez mal ce que .exist() dans SQL Server XQuery le fait. Si vous avez votre déclaration ici :
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
vous dites essentiellement à SQL Server de récupérer toutes les lignes de dbo.TableA où le XML est stocké dans XMLData contient un <book type=.....> node - vous sélectionnez des lignes de la table - PAS appliquer une sélection au XMLData contenu de la colonne...