Е, вашият XPath израз тук е „виновникът“:
query('//branch')
Това казва:изберете всички <разклонение>код> възли от целия документ. Той просто прави това, което му казвате да прави, наистина...
Какво не е наред с тази заявка тук??
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Това ще извлече всички
подвъзли за
възел, който има 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
съдържа <тип книга=.....>код> възел - избирате редове от таблицата - НЕ прилагане на селекция към
XMLData
съдържанието на колоната...