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