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

Makulering af XML fra udførelsesplaner

En meget lige måde kunne være dette (mens @x er din XML-udførelsesplan):

DECLARE @x XML=
N'<root>
    <ElementE1 AttributA1="A1-text belongs to E1[1]" OneMore="xyz">E1-Text 2</ElementE1>
    <ElementE1 AttributA1="A1-text belongs to E1[2]">E1-Text 2</ElementE1>
    <ElementParent>
      <subElement test="sub"/>
      Free text
    </ElementParent>
  </root>';

DECLARE @idoc INT;
EXEC sp_xml_preparedocument @idoc OUTPUT, @x;   
SELECT * FROM OPENXML (@idoc, '*');   
EXEC sp_xml_removedocument @idoc;  
 

Resultatet (ikke alle kolonner)

+----+----------+----------+--------------+------+--------------------------+ | id | parentid | nodetype | localname | prev | text | +----+----------+----------+--------------+------+--------------------------+ | 0 | NULL | 1 | root | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 2 | 0 | 1 | ElementE1 | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 3 | 2 | 2 | AttributA1 | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 13 | 3 | 3 | #text | NULL | A1-text belongs to E1[1] | +----+----------+----------+--------------+------+--------------------------+ | 4 | 2 | 2 | OneMore | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 14 | 4 | 3 | #text | NULL | xyz | +----+----------+----------+--------------+------+--------------------------+ | 5 | 2 | 3 | #text | NULL | E1-Text 2 | +----+----------+----------+--------------+------+--------------------------+ | 6 | 0 | 1 | ElementE1 | 2 | NULL | +----+----------+----------+--------------+------+--------------------------+ | 7 | 6 | 2 | AttributA1 | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 15 | 7 | 3 | #text | NULL | A1-text belongs to E1[2] | +----+----------+----------+--------------+------+--------------------------+ | 8 | 6 | 3 | #text | NULL | E1-Text 2 | +----+----------+----------+--------------+------+--------------------------+ | 9 | 0 | 1 | ElementParent| 6 | NULL | +----+----------+----------+--------------+------+--------------------------+ | 10 | 9 | 1 | subElement | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 11 | 10 | 2 | test | NULL | NULL | +----+----------+----------+--------------+------+--------------------------+ | 16 | 11 | 3 | #text | NULL | sub | +----+----------+----------+--------------+------+--------------------------+ | 12 | 9 | 3 | #text | 10 | Free text | +----+----------+----------+--------------+------+--------------------------+

id viser tydeligt, at algoritmen er bredde først , der er ingen id=1 (hvorfor nogensinde) og nodetype gør det muligt at skelne mellem elementer, attributter og (flydende) tekst. prev kolonne peger på en søskende oppe i kæden. De manglende kolonner er relateret til navnerum...

Tilgangen med FROM OPENXML er forældet, men dette er en af ​​de sjældne situationer, det kan stadig være meget nyttigt...

Du får en liste med id'er og forældre-ID'er, som du kan forespørge med en rekursiv CTE... Dette afhænger af, hvad du vil gøre med dette bagefter...



  1. Kan ikke oprette forbindelse til lokal MySQL-server gennem socket '/var/lib/mysql/mysql.sock' (2)

  2. mysql-fejl:Tabel mysql.innodb_table_stats blev ikke fundet

  3. Forøg ActiveModel ID Range til 8 byte

  4. SQL Server 2012 Service Pack 1 og kumulativ opdatering 1