Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server XML existe ()

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