Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да получа списък с имена на елементи от XML стойност в SQL Server

Можете да направите това чисто с XQuery и рекурсивен CTE (без 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)

Всъщност не прави много XQuery магия, но поне всичко е вградено, не изисква никакви съхранени процедури, специални разрешения и т.н.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените формата на текущата дата в SQL Server (T-SQL)

  2. Импортирайте множество CSV файлове в SQL Server от папка

  3. Поправете „Поне един от аргументите за COALESCE трябва да бъде израз, който не е константа NULL“ в SQL Server

  4. Какво означава времеви печат в T-Sql в C#?

  5. Изгледът по-бърз ли е от обикновена заявка?