MSSQL İçinde XML Sorguları Nasıl Yapılır ?

  • 24.12.2015
  • M.Tayyip Yetiş
  • MSSQL

mssql and xml Merhaba arkadaşlar bu kısa makalemde faydalı bir bilgiye yer vereceğim. Malum Mssql ile çalışırken binbir türlü durumla karşı karşıya kalabiliyoruz yazılım dünyası oldukça esnek ve bir sonuca ulaşmanın onlarca yolu olabiliyor doğru olan en kısa ve en mantıklı yolu bulabilmek. Veritabanı programcılığı da tam böyle bir durumu temsil eder çünkü oyun hamuru gibi herşey sizin kontrolünüzde ve yapacağınız en ufak bir değişiklik büyük bir performans kaybına sebep olabilir ya da tam tersi uygulamanızın performansını yükseltebilir. Bu açıklamayı yapmamın elbette bir sebebi var çünkü burada vereceğim örnekler için "bunu şu şekilde de yapabilirdin, şöyle olsa daha hızlı olurdu" diyenler olabilir fakat her zaman uygulama veritabanına uygun yazılmaz bazen de veritabanı uygulamaya göre yazılır. Amacımız her türlü duruma karşı bir önlem alabilmek.

Daha önceki makalemde For Xml Path kullanımını ve kullanma sebeplerini anlatmıştım. tabloları xml dökümanlarına çevirmek için kullanılan bir özellik. burada ise bu özellik ile oluşturulan bir dökümanın için xml sorguları yapacağız. öncelikle benim de kendisinden istifade ettğim buradaki makaleyi paylaşayım anlamadığınız yerler olursa ya da daha fazlasını öğrenmek isterseniz ziyaret edebilirsiniz. Aşağıdaki sql ile geçici ve tek sütunlu bir tablo oluşturalım bu sütunun içine bir xml dökümanı ekleyelim ve hemen ardından xml sorgumuzu yazalım.

Create Table #deneme (dokuman xml)
insert into #deneme (dokuman ) 
values ('<urun>
          <ID>458935</ID>
           <hediyeler>
            <hediye> id="34524">Kulaklık</hediye>
            <hediye> id="63452">Mikrofon</hediye>
          </hediyeler>
         </urun>')

select dokuman.query('/urun/hediyeler') from #deneme

Dönen sonuş aşağıdaki gibi olacaktır.

 
(No Column Name)
<hediyeler><hediye id="34524">Kulaklık</hediye><hediye id="63452">Mikrofon</hediye></hediyeler>

Buradaki önemli nokta Query() fonksiyonudur. Bu fonksiyon ile XML veri türünde olan bir sütun için içinde XPath sözdizimini kullanarak temel xml sorguları yazabilirsiniz. Eğer sadece tek bir veri getirmek istiyorsanız Value() fonksiyonunu kullanabilirsiniz. Yukarıdaki tablo üzerinden sorgu yaptımığımızı farzedelim

select dokuman.value('(/urun/hediyeler/hediye)[1]', 'varchar(max)') 
from #deneme

Value() fonksiyonunun ikinci parametresi dinamik oluşturulacak sütunun veri tipi ister burada varchar(max) olarak belirledik sonuç aşadaki gibi olacaktır

 
(No Column Name)
Kulaklık

 

Her bir xml düğümünün xpath sorgusuna uygun değeri bu sütuna satır olarak eklenecektir. Bu şekilde mssql ile xml sorguları çalıştırabilirsiniz hem kayıtlı xml dökümanları için hem de for xml path ile dinamik oluşturulan xml dökümanları için kullanılabilir. Veri türü xml olması gerektiği için Convert() ya da Cast() fonksiyonlarını kullanarak string değerleri xml olarak değiştirip çalışabilirsiniz. Eğer XPath ile ilgili yeterince bilginiz yoksa Bu adresi ziyaret edebilirsiniz. Umarım faydalı olmuştur.

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

Yorum Yap

Diğer Makaleler

Etiketler