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

SQL Server 2008:XML DML を使用して要素の名前を変更しますか?

    ことわざにあるように、「意志あるところに道あり」

    2 つの方法があります: 1 つ目は、以前の xml を、元の xml から新しい要素名で構築された新しい xml に単純に置き換えることです。私の例では、Legs/Leg を Limbs/Limb に変更しましたが、これは最も単純なスキーマ以外では非常に複雑になる可能性があります

    次に、挿入と削除を組み合わせるより適切なアプローチです。

    それらを 1 つの簡単な例にまとめました:

    declare @xml as xml = '<animal species="Mouse">
      <legs>
        <leg>Front Right</leg>
        <leg>Front Left</leg>
        <leg>Back Right</leg>
        <leg>Back Left</leg>
      </legs>
    </animal>'
    
    set @xml = (select 
         t.c.value('@species', 'varchar(max)') as '@species'
        ,(select
         ti.C.value('.', 'varchar(max)') 
    from @Xml.nodes('//animal/legs/leg') ti(c) for xml path('limb'), /* root('limb'), */type) as    limbs   
    from @xml.nodes('//*:animal') t(c) for xml path('animal'), type)
    
    select @xml;
    
    while (@xml.exist('/animal/limbs/limb') = 1) begin
        /*insert..*/
        set @xml.modify('
                insert <leg>{/animal/limbs/limb[1]/text()}</leg>
                before (/animal/limbs/limb)[1]
            ');
        /*delete..*/
        set @xml.modify('delete (/animal/limbs/limb)[1]');
    end
    
    set @xml.modify('
            insert <legs>{/animal/limbs/leg}</legs>
            before (/animal/limbs)[1]
        ');
    set @xml.modify('delete (/animal/limbs)[1]');
    
    select @xml;
    


    1. SQLServerからの出力パラメータを使用してOracleストアドプロシージャを呼び出す

    2. PHP SQL:1つのhtmlフォームから複数のデータベースにデータを保存する方法または1つのデータベースから別のデータベースにデータを自動的にコピーする方法

    3. クエリを実行して、子レコードを含む親レコードを取得し、続いてmysqlの次の親子レコードを取得します

    4. 私のSQLは複数のテーブルから選択するか結合するか