Итак, ваше выражение XPath здесь является «виновником»:
query('//branch')
Это говорит: выберите все <branch>
узлов из всего документа.Он просто делает то, о чем вы говорите, на самом деле ....
Что не так с этим запросом здесь ??
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Это приведет к извлечению всех подузлов <branch>
для узла <book>
, который имеет type="SF"
в качестве атрибута ....
Чего вы пытаетесь достичь с помощью query()
, exist()
и value()
в одном выражении ??Вполне возможно, это можно сделать намного проще ....
Кроме того: я думаю, что вы неправильно истолковываете то, что делает .exist()
в SQL Server XQuery.Если у вас есть выражение здесь:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
, вы в основном говорите SQL Server извлечь все строки из dbo.TableA
, где XML, хранящийся в XMLData
, содержит узел <book type=.....>
- вы выбираете строкииз таблицы - NOT применение выделения к содержимому столбца XMLData
...