sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik een lijst met elementnamen krijgen van een XML-waarde in SQL Server?

U kunt dit netjes doen met XQuery en een recursieve CTE (geen 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)

Het doet niet echt veel XQuery-magie, maar het is in ieder geval allemaal inline, vereist geen opgeslagen procedures, speciale machtigingen, enz.



  1. SQL Server 2016:een login aanmaken

  2. hoe de wf_java_deferred-wachtrij opnieuw op te bouwen

  3. door komma's gescheiden lijst als resultaat van select-instructie in Oracle

  4. Krijg resultatenset van orakel opgeslagen procedure