sql >> Databasteknik >  >> RDS >> Sqlserver

Analysera XML med flernivåkapsling i SQL

Förutsatt att du har din XML i en SQL Server-variabel som heter @XML , kan du använda den native XQuery stöd i SQL Server 2005 och nyare för att göra detta mycket mer elegant och 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)

Detta ger mig en utdata av

Med XQuery-operatorer som .nodes() eller .value() , kan du enkelt "shara" ett XML-dokument till relationsdata och lagra det efter behov.

Det första anropet till @xml.nodes('//ConditionSet') kommer att få en "pseudo"-tabell för varje matchande nod - så varje <ConditionSet> noden kommer att returneras i "pseudo"-tabellen XT som kolumn XC , och sedan kan jag enkelt ta attribut (eller XML-element) från det XML-fragmentet med XQuery-metoder som .value() .

Eller så kan jag till och med ta tag i listan över undernoder <Condition> för var och en av dessa <ConditionSet> noder - med CROSS APPLY med ett andra anrop till .nodes()




  1. Utveckling av feltolerans i PostgreSQL:Synchronous Commit

  2. Få korrekt tid från Oracle-datum i Solr DataImportHandler

  3. Felsökning av MySQL-replikering:Del ett

  4. Postgresql create extension misslyckas