Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę uzyskać listę nazw elementów z wartości XML w SQL Server?

Możesz to zrobić czysto za pomocą XQuery i rekurencyjnego CTE (bez 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)

Tak naprawdę nie robi wiele magii XQuery, ale przynajmniej wszystko jest wbudowane, nie wymaga żadnych procedur składowanych, specjalnych uprawnień itp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać listę kolumn z unikalnymi ograniczeniami w bazie danych SQL Server — samouczek SQL Server / TSQL część 98?

  2. Jak pobrać rekordy z ostatnich 30 minut w MS SQL?

  3. Eliminowanie zduplikowanych wartości na podstawie tylko jednej kolumny tabeli

  4. Jak zapobiec automatycznemu zamykaniu programu SQL Server LocalDB?

  5. Wyniki zapytań e-mail jako tabela HTML w SQL Server (T-SQL)