sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man konverterar kapslad hierarki av xml till sql-tabell

Vad sägs om detta (jag deklarerade @input att vara en XML-datatypvariabel med ditt XML-innehåll - ersätt därefter):

SELECT
    Parent.Elm.value('(@ID)[1]', 'int') AS 'ID',
    Parent.Elm.value('(Title)[1]', 'varchar(100)') AS 'Title',
    Parent.Elm.value('(Description)[1]', 'varchar(100)') AS 'Description',
    Child.Elm.value('(@ID)[1]', 'int') AS 'ChildID',
    Child.Elm.value('(Title)[1]', 'varchar(100)') AS 'ChildTitle',
    Child.Elm.value('(StartDate)[1]', 'DATETIME') AS 'StartDate',
    Child.Elm.value('(EndDate)[1]', 'DATETIME') AS 'EndDate'
FROM
    @input.nodes('/ROOT/WrapperElement/ParentElement') AS Parent(Elm)
CROSS APPLY
    Parent.Elm.nodes('ChildElement') AS Child(Elm)

Du itererar i princip över alla /ROOT/WrapperElement/ParentElemet noder (som Parent(Elm) pseudotabell), och för var och en av dessa poster gör du sedan en CROSS APPLY för de underordnade elementen som finns inuti det ParentElement och plocka fram nödvändig information.

Borde fungera - hoppas jag!




  1. Hur kan jag använda mySQL replace() för att ersätta strängar i flera poster?

  2. mysql välj uppdatering

  3. MySql-kommentarer för kolumnerna i en vy?

  4. Är det möjligt att ändra systemets lagrade procedur?