Cóż, twoje wyrażenie XPath to „winowajca”:
query('//branch')
To mówi:wybierz wszystkie <branch>
węzły z całego dokumentu. Po prostu robi to, co mu każesz, naprawdę…
Co jest nie tak z tym zapytaniem?
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Spowoduje to pobranie wszystkich <branch>
podwęzły dla <book>
węzeł, który ma type="SF"
jako atrybut....
Co chcesz osiągnąć za pomocą query()
, exist()
i value()
wszystko w tym samym oświadczeniu? Całkiem możliwe, że można to zrobić o wiele łatwiej....
Ponadto:myślę, że błędnie interpretujesz to, co .exist()
w SQL Server XQuery. Jeśli masz tutaj swoje oświadczenie:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
w zasadzie mówisz SQL Serverowi, aby pobrał wszystkie wiersze z dbo.TableA
gdzie XML jest przechowywany w XMLData
zawiera <book type=.....>
węzeł - wybierasz wiersze z tabeli - NIE zastosowanie zaznaczenia do XMLData
zawartość kolumny...