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

Làm cách nào để lấy danh sách tên phần tử từ một giá trị XML trong SQL Server

Bạn có thể thực hiện điều này một cách rõ ràng với XQuery và một CTE đệ quy (không có OPENXML ):

DECLARE @xml xml
SET @xml = '<a><b /><c><d /><d /><d /></c></a>';

WITH Xml_CTE AS
(
    SELECT
        CAST('/' + node.value('fn:local-name(.)',
            'varchar(100)') AS varchar(100)) AS name,
        node.query('*') AS children
    FROM @xml.nodes('/*') AS roots(node)

    UNION ALL

    SELECT
        CAST(x.name + '/' + 
            node.value('fn:local-name(.)', 'varchar(100)') AS varchar(100)),
        node.query('*') AS children
    FROM Xml_CTE x
    CROSS APPLY x.children.nodes('*') AS child(node)
)
SELECT DISTINCT name
FROM Xml_CTE
OPTION (MAXRECURSION 1000)

Nó không thực sự làm được nhiều điều kỳ diệu của XQuery, nhưng ít nhất tất cả đều là nội tuyến, không yêu cầu bất kỳ thủ tục lưu trữ nào, các quyền đặc biệt, v.v.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tính toán tổng số chạy / số dư chạy

  2. Lỗi máy chủ SQL - HRESULT E_FAIL đã được trả về từ một cuộc gọi đến thành phần COM

  3. UNIX_TIMESTAMP trong SQL Server

  4. Làm cách nào để tạo các dạng xem cụ thể hóa trong SQL Server?

  5. TSQL Thử / Bắt trong Giao dịch hay ngược lại?