Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server XML tồn tại ()

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các vấn đề về hiệu suất với SQL Server 2012 Enterprise Edition theo cấp phép CAL

  2. Chuyển đổi số tháng thành hàm tên tháng trong SQL

  3. Cách thực hiện:Tạo trình kích hoạt cho ngày sửa đổi cập nhật tự động với SQL Server 2008

  4. Các ràng buộc có thể hoãn lại trong SQL Server

  5. Tạo một dạng xem trong SQL Server 2017