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

Tìm thứ tự nút trong tài liệu XML trong SQL Server

Bạn có thể mô phỏng position() chức năng bằng cách đếm số lượng nút anh em trước mỗi nút:

SELECT
    code = value.value('@code', 'int'),
    parent_code = value.value('../@code', 'int'),
    ord = value.value('for $i in . return count(../*[. << $i]) + 1', 'int')
FROM @Xml.nodes('//value') AS T(value)

Đây là tập hợp kết quả:

code   parent_code  ord
----   -----------  ---
1      NULL         1
11     1            1
111    11           1
12     1            2
121    12           1
1211   121          1
1212   121          2

Cách hoạt động:

  • for $i in . mệnh đề xác định một biến có tên $i chứa nút hiện tại (. ). Về cơ bản, đây là một bản hack để giải quyết vấn đề XQuery thiếu current() giống XSLT chức năng.
  • ../* biểu thức chọn tất cả anh chị em (con của cha mẹ) của nút hiện tại.
  • [. << $i] vị từ lọc danh sách các anh chị em thành những người đứng trước (<< ) nút hiện tại ($i ).
  • Chúng tôi count() số anh chị em đứng trước rồi thêm 1 vào để được vị trí. Bằng cách đó, nút đầu tiên (không có anh chị em nào trước đó) được gán vị trí là 1.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SMALLDATETIMEFROMPARTS () Ví dụ trong SQL Server (T-SQL)

  2. Các cách có thể để khắc phục sự cố lỗi siêu dữ liệu máy chủ SQL

  3. Cách thêm mã hóa xml <? Xml version =1.0 encoding =UTF-8?> Vào Đầu ra xml trong SQL Server

  4. Cách tạo phạm vi ngày trong SQL Server

  5. Nhận đặc quyền cột cho một bảng trong SQL Server bằng T-SQL:sp_column_privileges