sql >> データベース >  >> RDS >> Sqlserver

SQL で複数レベルのネストを使用して XML を解析する

    @XML という SQL Server 変数に XML があるとします。 、ネイティブ XQuery を使用できます SQL Server 2005 以降でのサポートにより、これをよりエレガントかつ効率的に行うことができます:

    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)
    

    これにより、

    の出力が得られます

    .nodes() のような XQuery 演算子を使用 または .value() 、XML ドキュメントをリレーショナル データに簡単に「細分化」し、必要に応じて保存できます。

    @xml.nodes('//ConditionSet') への最初の呼び出し 一致するノードごとに「疑似」テーブルを取得するため、各 <ConditionSet> ノードは「疑似」テーブル XT に返されます 列 XC として .value() のような XQuery メソッドを使用して、その XML フラグメントから属性 (または XML 要素) を簡単に取得できます。 .

    または、サブノード <Condition> のリストを取得することもできます これらの <ConditionSet> のそれぞれについて ノード - CROSS APPLY を使用 .nodes() への 2 回目の呼び出し




    1. MySQLでは、数字を引用する必要がありますか?

    2. PostgreSQLの日付から年を引く

    3. OracleXMLTable-親ノードから列をフェッチしています

    4. mysql指定された値のセットですべての行の列を更新する方法