sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag få en lista över elementnamn från ett XML-värde i SQL Server

Du kan göra detta rent med XQuery och 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 egentligen inte mycket XQuery-magi, men det är åtminstone inline, kräver inga lagrade procedurer, speciella behörigheter etc.



  1. Ansluter .NET på Linux till en ODBC-datakälla

  2. Skapa rumsenhet för en tabell som har ett fält med LONG datatyp i Sqlite

  3. CASE kontra DECODE

  4. Hur man tar bort efterföljande nollor från en decimal i PostgreSQL