Bene, la tua espressione XPath qui è il "colpevole":
query('//branch')
Questo dice:seleziona tutti <branch>
nodi dell'intero documento. Sta solo facendo quello che gli stai dicendo di fare, davvero...
Cosa c'è di sbagliato in questa query qui??
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Ciò recupererebbe tutto il <branch>
sottonodi per il <book>
nodo che ha type="SF"
come attributo....
Cosa stai cercando di ottenere con la tua query()
, exist()
e value()
tutti nella stessa affermazione?? Molto probabilmente, può essere fatto molto più facilmente....
Inoltre:penso che tu stia interpretando erroneamente cosa .exist()
in SQL Server XQuery lo fa. Se hai la tua dichiarazione qui:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
in pratica stai dicendo a SQL Server di recuperare tutte le righe da dbo.TableA
dove l'XML è memorizzato in XMLData
contiene un <book type=.....>
nodo - stai selezionando le righe dalla tabella - NON applicando una selezione a XMLData
contenuto della colonna...