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...