Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server XML existe()


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