MSSQL İçinde XML Sorguları Nasıl Yapılır ? | MektepTV
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 )
select dokuman.query('/urun/hediyeler') from #deneme
Dönen sonuş aşağıdaki gibi olacaktır.
<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)', 'varchar(max)')
Value() fonksiyonunun ikinci parametresi dinamik oluşturulacak sütunun veri tipi ister burada varchar(max) olarak belirledik sonuç aşadaki gibi olacaktır
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.
mssql and xml
mssql use xml
veritabanında xml kullanmak