İleri Seviye SQL Server Sql Server

SQL Server’da STUFF ve FOR XML PATH’in Birlikte Kullanımı

SQL Server Eğitimleri Kanalına Abone Olun

Herkese merhaba,

Bu yazıda SQL Server’da STUFF ve FOR XML PATHin birlikte kullanımından bahsedeceğim.

SQL Server’da bu iki ifade ile örnek çok fazla görmüşsünüzdür ama nasıl kullanıldığı ile ilgili çok fazla detaylı kaynak yoktur.

Bu yazıda bu konuyu ele almaya çalışacağım.

Öncelikli olarak SQL Server’da STUFF fonksiyonu bir ifadenin belli bir yerini başka bir ifade ile değiştirmek için kullanılır

FOR XML PATH ise tablo şeklinde oluşturulmuş verilerden karmaşık XML belgeleri oluşturulmak istenildiğinde en iyi kullanılacak araçtır.

Peki ikisini birlikte nasıl kullanacağız ve ne işimize yarayacak?

İlk olarak aşağıdaki tabloyu oluşturup verileri tablo içerisine ekleyelim.

--Personel Tablosunu Oluşturulması

CREATE TABLE PersonelTablosu
(
    Id INT PRIMARY KEY IDENTITY(1, 1),
    PersonelTip INT NOT NULL,
    PersonelAdi VARCHAR(255)
);

--Personel Tablosuna Veri Eklenmesi

INSERT INTO PersonelTablosu
(
    PersonelTip,
    PersonelAdi
)
VALUES
(1, 'Yavuz'),
(1, 'Hasan'),
(1, 'Bilge'),
(1, 'Pelin'),
(1, 'Büşra'),
(1, 'Kübra'),
(2, 'Mustafa'),
(2, 'Fevziye'),
(2, 'Necla'),
(2, 'Halis');
--Personel Tablosunun Kontrol Edilmesi

SELECT *
FROM PersonelTablosu;

Şimdi elimizde bir personel tablosu var. Bu personel tablosunda aşağıdaki kodu çalıştıralım.

--İlk kodumuz

SELECT ',' + PersonelAdi
FROM PersonelTablosu
FOR XML PATH('');

Bu kodu çalıştırdığınızda aşağıdaki sonucu alacaksınız.

SQL Server'da STUFF ve FOR XML PATH'in Birlikte Kullanımı

Görüldüğü üzere en başta virgül var. Bu virgülü nasıl kaldıracağız. STUFF fonksiyonu ile bu işlemi yapıyoruz. Aşağıdaki kodu çalıştıralım.

--İkinci kodumuz

SELECT PersonelAdi = STUFF(
                     (
                         SELECT ',' + PersonelAdi FROM PersonelTablosu FOR XML PATH('')
                     ),
                     1,
                     1,
                     ''
                          )
FROM PersonelTablosu;

SQL Server'da STUFF ve FOR XML PATH'in Birlikte Kullanımı

Görüldüğü üzere virgül kalktı ama satır çokladı. Bu satır çoklama işini nasıl çözeceğiz. Aşağıdaki kodu çalıştıralım.

SELECT PersonelTip,
       PersonelAdi = STUFF(
                     (
                         SELECT ',' + PersonelAdi
                         FROM PersonelTablosu t1
                         WHERE t1.PersonelTip = t2.PersonelTip
                         FOR XML PATH('')
                     ),
                     1,
                     1,
                     ''
                          )
FROM PersonelTablosu t2
GROUP BY PersonelTip;

SQL Server'da STUFF ve FOR XML PATH'in Birlikte Kullanımı

Görüldüğü üzere PersonelTip’e göre SUBQUERY yapıp grupladığımız zaman bu sıkıntı da gitmiş oldu.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

2 Kez Okundu
SQL Server Eğitimleri Kanalına Abone Olun

Yazar hakkında

Yavuz Selim Kart

SQL Server tarafında kendini ilerletmeye çalışırken bildiklerini sürekli başkalarına aktaran, yazılım dünyasında (C#, Java, Python vb.) kendini güncel tutmaya çalışan, araştırma yapmaktan bıkmayan, meraklı, bilginin üzerine bilgi katmaktan mutluluk duyan bir yazılım eğitmeni ve kod sever.
Grafik tasarım dünyasında Indesign'ı anlatacak kadar iyi kullanabilen, Photoshop ve Illustrator'e de orta düzey hakimiyeti bulunan, internet üzerinde online kimya dergisi kurmuş ve bunu yüzbinlerce kişiye ulaştırmayı başaran bir grafik sever.
WordPress tarafında 5 adet web sitesi kurmuş, bu sistemler üzerine çalışan bir WordPress sever.
Sosyal medya üzerinde okumalara ve araştırmalara devam eden, kendi kurmuş olduğu kimya dergisini daha çok kişiye nasıl ulaştırırım diye düşünen ve bu konuda SEO çalışmaları üzerine kafa yoran bir Sosyal Medya sever.
Kısaca çok çalışmayı seven, azimli biriyim.

Kopyalamak Yasaktır!