sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server XML existe ()

Bueno, su expresión XPath aquí es el "culpable":

query('//branch')

Esto dice:selecciona todos <branch> nodos de todo el documento. Solo está haciendo lo que le dices que haga, de verdad....

¿Qué tiene de malo esta consulta aquí?

SELECT 
    XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA

Eso recuperaría todo el <branch> subnodos para el <book> nodo que tiene type="SF" como atributo....

¿Qué intenta lograr con su query()? , exist() y value() todo en el mismo comunicado?? Muy posiblemente, se puede hacer mucho más fácil....

Además:creo que estás malinterpretando lo que .exist() en SQL Server XQuery sí. Si tienes tu declaración aquí:

 SELECT (some columns)
 FROM dbo.TableA
 WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1

básicamente le estás diciendo a SQL Server que recupere todas las filas de dbo.TableA donde el XML almacenado en XMLData contiene un <book type=.....> nodo - está seleccionando filas de la tabla - NO aplicar una selección a XMLData contenido de la columna...