sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg få en liste over elementnavne fra en XML-værdi i SQL Server

Du kan gøre dette rent med XQuery og en rekursiv CTE (ingen 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)

Det gør ikke rigtig meget XQuery-magi, men det er i det mindste inline, kræver ingen lagrede procedurer, specielle tilladelser osv.



  1. Oracle-forespørgsel til at finde alle forekomster af et tegn i en streng

  2. Beregn Max of Sum af et kommenteret felt over en grupperet efter forespørgsel i Django ORM?

  3. Brug af HHVM med WordPress

  4. Brugerregistrering og e-mailbekræftelse PHP og MySQL