sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu získat seznam názvů prvků z hodnoty XML v SQL Server

Můžete to udělat čistě pomocí XQuery a rekurzivního 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)

Ve skutečnosti to moc nekouzlí XQuery, ale alespoň je to všechno inline, nevyžaduje žádné uložené procedury, speciální oprávnění atd.



  1. MySQL uděluje databázi všechna oprávnění kromě jedné tabulky

  2. mysql:proč porovnávání „řetězce“ s 0 dává pravdu?

  3. Co je nového v MariaDB Cluster 10.4

  4. Jak vytvořit Rest API s Spring Boot pomocí MySQL a JPA