Váš výraz XPath zde je "viníkem":
query('//branch')
Toto říká:vyberte vše <branch> uzly z celého dokumentu. Dělá jen to, co mu říkáte, opravdu...
Co je na tomto dotazu špatného?
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
To by načetlo všechny <branch> poduzly pro <book> uzel, který má type="SF" jako atribut....
Čeho se snažíte dosáhnout pomocí query() , exist() a value() vše ve stejném prohlášení?? Dost možná to jde udělat mnohem jednodušeji....
Také:Myslím, že si špatně vykládáte to, co .exist() v SQL Server XQuery ano. Pokud máte své prohlášení zde:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
v podstatě říkáte serveru SQL, aby načetl všechny řádky z dbo.TableA kde je XML uloženo v XMLData obsahuje <book type=.....> uzel - vybíráte řádky z tabulky - NE použití výběru na XMLData obsah sloupce...