Chà, biểu thức XPath của bạn ở đây là "thủ phạm":
query('//branch')
Điều này cho biết:chọn tất cả <branch>
các nút từ toàn bộ tài liệu. Nó chỉ đang làm những gì bạn yêu cầu nó làm, thực sự ....
Có gì sai với truy vấn này ở đây ??
SELECT
XMLData.query('/library/books/book[@type=sql:variable("@genre")]//branch')
FROM dbo.TableA
Điều đó sẽ truy xuất tất cả <branch>
subnodes cho <book>
nút có type="SF"
như một thuộc tính ....
Bạn đang cố gắng đạt được điều gì với query()
của mình , exist()
và value()
tất cả trong cùng một tuyên bố ?? Rất có thể, nó có thể được thực hiện dễ dàng hơn rất nhiều ....
Ngoài ra:Tôi nghĩ rằng bạn đang hiểu sai về những gì .exist()
trong SQL Server XQuery không. Nếu bạn có tuyên bố của mình ở đây:
SELECT (some columns)
FROM dbo.TableA
WHERE XMLData.exist('//book[@type = sql:variable("@genre")]') = 1
về cơ bản bạn đang yêu cầu SQL Server truy xuất tất cả các hàng từ dbo.TableA
nơi XML được lưu trữ trong XMLData
chứa <book type=.....>
nút - bạn đang chọn các hàng từ bảng - KHÔNG áp dụng lựa chọn cho XMLData
nội dung của cột ...