Tja, ditt XPath-uttryck här är "boven":
query('//branch')
Detta säger:välj alla <branch> noder från hela dokumentet. Den är bara att göra vad du säger åt den att göra, verkligen...
Vad är det för fel på den här frågan?
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Det skulle hämta alla <branch> subnoder för <book> nod som har type="SF" som ett attribut...
Vad försöker du uppnå med din query() , exist() och value() alla i samma uttalande?? Helt möjligt kan det göras mycket enklare...
Dessutom:Jag tror att du misstolkar vad .exist() i SQL Server gör XQuery. Om du har ditt uttalande här:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
du säger i princip åt SQL Server att hämta alla rader från dbo.TableA där XML lagras i XMLData innehåller en <book type=.....> nod - du väljer rader från tabellen - NOT tillämpa ett urval på XMLData kolumns innehåll...