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