2013-12-16 29 views
7

Bir SQL Server sorgusundan bir XML dosyası oluşturuyorum.SQL Server: XML sıralama denetimi özniteliğine göre

Öğe sorunlarının sıralanmasıyla ilgili bir sorunum var. Örneğin, aşağıdaki gibi basit bir kod mevcuttur. Gördüğünüz gibi

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

ağaç ve ağaç dereceden farklı unsurlarıdır ve böyle

<test> 
    <tree abc="123"/> 
    <tree-order abc="456"/> 
    <tree abc="789"/> 
</test> 

olarak özelliklerine göre sıralamak istiyorum.

Herkes bu sorunu çözmek için iyi bir fikriniz var mı?

Teşekkür ederiz.

<Main> 

<test> 
    <tree abc="123"/> 
    <tree abc="456"/> 
    <tree-order abc="789/> 
</test> 

<test> 
    <tree abc="123"/> 
    <tree abc="456"/> 
    <tree-order abc="789/> 
</test> 

</Main> 

teşekkür ederiz:

<Main> 

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 

</Main> 

olmak AS

Üzgünüm

aşağıda ayrıntılı soru var. Varolan xml yeniden sıralamak isterseniz

cevap

8

, sen XQuery kullanabilirsiniz:

declare @data xml = ' 
<test> 
    <tree abc="123"/> 
    <tree abc="789"/> 
    <tree-order abc="456"/> 
</test> 
' 

select @data.query('<test>{for $i in test/* order by $i/@abc return $i}</test>') 

Sonuç:

<test> 
    <tree abc="123" /> 
    <tree-order abc="456" /> 
    <tree abc="789" /> 
</test> 

sql fiddle demo

güncelleme: kullanın 2

niteliklerin tamsayı değerlerine göre sipariş etmek

select @data.query(' 
    element Main { 
     for $j in Main/test 
      return element test { 
       for $i in $j/* order by $i/@abc return $i 
      } 
    } 
') 

sql fiddle demo

güncelleme: böyle XQuery kullanabilirsiniz, birden çok düğüm yeniden sıralamak için :

select @data.query(' 
    element Main { 
     for $j in Main/test 
      return element test { 
       for $i in $j/* order by $i/@abc cast as xs:integer? 
        return $i 
      } 
    } 
') 

sql fiddle demo

+1

ben detay sorum daha eklendi teşekkür ederim! –