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

Parse XML med multilevel nesting i SQL

Forudsat at du har din XML i en SQL Server-variabel kaldet @XML , kan du bruge den native XQuery understøttelse i SQL Server 2005 og nyere for at gøre dette meget mere elegant og effektivt:

DECLARE @XML XML = '...(your XML here).....' 

SELECT
    RootID = @xml.value('(/Root/@ID)[1]', 'int'),
    ConditionSetOperator = XC.value('@Operator', 'varchar(50)'),
    ConditionID =  XC2.value('@ID', 'int'),
    ConditionOperator = XC2.value('@Operator', 'varchar(50)')
FROM 
    @Xml.nodes('//ConditionSet') AS XT(XC)
CROSS APPLY
    xc.nodes('Condition') AS XT2(XC2)

Dette giver mig et output på

Med XQuery-operatorer som .nodes() eller .value() , kan du nemt "makulere" et XML-dokument til relationelle data og gemme det efter behov.

Det første kald til @xml.nodes('//ConditionSet') får en "pseudo"-tabel for hver matchende node - så hver <ConditionSet> node vil blive returneret i "pseudo" tabellen XT som kolonne XC , og så kan jeg nemt få fat i attributter (eller XML-elementer) fra det XML-fragment ved hjælp af XQuery-metoder som .value() .

Eller jeg kan endda få fat i listen over undernoder <Condition> for hver af disse <ConditionSet> noder - ved hjælp af CROSS APPLY med et andet kald til .nodes()




  1. Bruger du Mysql på kommandolinjen i osx - kommandoen blev ikke fundet?

  2. Laravel-migrering:Fjern onDelete('cascade') fra eksisterende fremmednøgle

  3. Apache Spark ODBC-driver

  4. Sådan får du gennemsnitsværdier for tidsintervaller i Postgres