sql >> Databáze >  >> RDS >> Sqlserver

Analyzujte XML pomocí víceúrovňového vnořování v SQL

Za předpokladu, že máte svůj XML v SQL Server proměnné s názvem @XML , můžete použít nativní XQuery podporu v SQL Server 2005 a novějších, abyste to udělali mnohem elegantněji a efektivněji:

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)

To mi dává výstup

S operátory XQuery, jako je .nodes() nebo .value() , můžete snadno „skartovat“ dokument XML na relační data a uložit je podle potřeby.

První volání @xml.nodes('//ConditionSet') získá "pseudo" tabulku pro každý odpovídající uzel - takže každý <ConditionSet> uzel bude vrácen v "pseudo" tabulce XT jako sloupec XC a pak mohu snadno získat atributy (nebo prvky XML) z tohoto fragmentu XML pomocí metod XQuery, jako je .value() .

Nebo mohu dokonce uchopit seznam poduzlů <Condition> pro každý z těchto <ConditionSet> uzly - pomocí CROSS APPLY s druhým voláním .nodes()




  1. Přidání indexu na velkou tabulku trvá věčnost

  2. Yii2:jak zadat schémata vícenásobné databáze?

  3. Vypočítejte celkovou dobu trvání na posledním řádku v mysql

  4. Jak zrychlit SQL dotazy? indexy?