SQL STUFF FOR XML PATH Kullanımı

STUFF() işlevi, bir dizenin belirli bir bölümünü siler ve ardından belirtilen bir konumdan başlayarak dizeye başka bir bölüm ekler.

Söz Dizimi: STUFF(metinbaslangicuzunlukyeni metin)

SELECT STUFF('Developer Fatih', 11, 0, 'Alkan');

Sonuç: Developer AlkanFatih


FOR XML PATH işlevi, sorgu sonuçlarını PATH bağımsız değişkeninde bulunan öğe adıyla XML öğeleri olarak çıkarmanıza olanak tanır.

SELECT GrupAdi + ',' FROM TBL_GRUP FOR XML PATH ('')

Sonuç: Akademik,Bitki-Hayvan,Diğer,Dijital Arşiv,Er Ofis,Hobiler,İş Hayatı,Sağlık,Genel,


Ben bu örnekleri kullanarak şöyle bir uygulama sorgusu yaptım o nedenle anlatmak istedim. Bir kategorim ve o kategoriye bağlı alt kategorilerimin olduğu bir tablom vardı. Her ana kategorimin yanına yeni bir satır oluşturup tek bir hücrenin içerisinde bağlı olduğu alt kategori bilgilerinin getirilmesini istedim aşağıda ki örnekle daha iyi anlaşılacağını düşünüyorum. Şöyle ki…

Ana Kategori Tablosu Alt Kategori Tablosu
ID | Kategori Ad ID | Ana Kat ID | Alt Kategori Ad | Sayfa
1 Akademik 1 2 Günlük Plan sayfagunluk
2 Sosyal Hayat 2 2 Sosyal Hayat sayfasosyal
3 Taşınır Taşınmaz 3 3 Kira Takip sayfakira

İstenilen Sonuç:

1 | Sosyal Hayat | 1, Günlük Plan, sayfagunluk

Kod Satırı

SELECT TBL_GRUP.GrupID, TBL_GRUP.GrupAdi, STUFF((SELECT ',' + CAST(TBL_MODUL.ModulID AS nvarchar), ',' + TBL_MODUL.ModulAdi, ',' + TBL_MODUL.ModulLink FROM TBL_MODUL WHERE TBL_MODUL.ModulDurum=1 AND TBL_GRUP.GrupID = TBL_MODUL.GrupID ORDER BY ModulSira FOR XML PATH('')), 1, 1, '') [ModulAdi] FROM TBL_GRUP WHERE TBL_GRUP.GrupDurum=1

Ekran Çıktısı