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

XPath để tìm nạp giá trị SQL XML

Cập nhật

Lời khuyên của tôi là chia nhỏ XML thành các quan hệ và thực hiện tìm kiếm và tham gia vào quan hệ được kết quả, theo kiểu định hướng tập hợp, chứ không phải theo kiểu thủ tục tìm kiếm các nút cụ thể trong XML. Đây là một truy vấn XML đơn giản chia nhỏ các nút và thuộc tính quan tâm:

select x.value(N'../../../../@stepId', N'int') as StepID
  , x.value(N'../../@id', N'int') as ComponentID
  , x.value(N'@nom',N'nvarchar(100)') as Nom
  , x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box/components/component/variables/variable') t(x)

Tuy nhiên, nếu bạn phải sử dụng XPath truy xuất chính xác giá trị quan tâm:

select x.value(N'@valeur', N'nvarchar(100)') as Valeur
from @x.nodes(N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
       variables/variable[@nom="Enabled"]') t(x)

Nếu stepID và ID thành phần là cột, không phải biến, bạn nên sử dụng sql:column () thay vì sql:variable trong bộ lọc XPath. Xem Dữ liệu quan hệ ràng buộc bên trong dữ liệu XML .

Và nếu tất cả những gì bạn cần là kiểm tra sự tồn tại, bạn có thể sử dụng tồn tại ( ) Phương thức XML:

select @x.exist(
  N'/xml/box[@stepId=sql:variable("@stepID")]/
    components/component[@id = sql:variable("@componentID")]/
      variables/variable[@nom="Enabled" and @valeur="Yes"]') 


  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ách tránh tình trạng chạy đua cơ sở dữ liệu khi tăng PK của hàng mới theo cách thủ công

  2. Khắc phục Msg 8117 “Kiểu dữ liệu toán hạng varchar không hợp lệ cho toán tử sum” trong SQL Server

  3. Tạo một ngày từ tháng và năm với T-SQL

  4. Làm cách nào để gieo lại danh tính bảng trong SQL Server 2008 và hoàn tác tất cả một cách an toàn?

  5. Trợ giúp kích hoạt máy chủ sql - cùng một bảng cập nhật