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