Bem, sua expressão XPath aqui é o "culpado":
query('//branch')
Isto diz:selecione todos
<branch> nós de todo o documento. Ele está apenas fazendo o que você está dizendo para fazer, realmente .... O que há de errado com essa consulta aqui??
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Isso recuperaria todos os
<branch> subnós para o <book> nó que tem type="SF" como atributo.... O que você está tentando alcançar com sua
query() , exist() e value() tudo na mesma declaração?? Muito possivelmente, pode ser feito muito mais fácil .... Além disso:acho que você está interpretando mal o que
.exist() no SQL Server XQuery faz. Se você tem sua declaração aqui: SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
você está basicamente dizendo ao SQL Server para recuperar todas as linhas de
dbo.TableA onde o XML armazenado em XMLData contém um <book type=.....> node - você está selecionando linhas da tabela - NÃO aplicando uma seleção ao XMLData conteúdo da coluna...