Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So konvertieren Sie die verschachtelte XML-Hierarchie in eine SQL-Tabelle

Wie wäre es damit (ich habe @input deklariert eine XML-Datentyp-Variable mit Ihrem XML-Inhalt sein - entsprechend ersetzen):

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)

Sie durchlaufen im Grunde alle /ROOT/WrapperElement/ParentElemet Knoten (als Parent(Elm)). Pseudo-Tabelle), und für jeden dieser Einträge führen Sie dann ein CROSS APPLY durch für die in diesem ParentElement enthaltenen untergeordneten Elemente und ziehen Sie die notwendigen Informationen heraus.

Sollte funktionieren - hoffe ich!