SQL Server’da Cursor ile Tekrarlanan Kayıtları Silmek
Herkese merhaba,
Bu yazıda SQL Server’da Cursor kullanarak yinelenen yani tekrarlanan kayıtların nasıl silineceğinden bahsedeceğim. SQL Server’da benzer kayıtlar içeren satırlar tablolarımızda bulunabilir. Bunları tek tek silmek zor, zaman alıcı olabilir ayrıca veri kaybına da neden olabilirsiniz. İşlemi daha iyi anlamak için aşağıdaki örneğimizi inceleyelim.
--Örnek Database oluşturmak CREATE DATABASE Ornek GO --Database kullanımı USE Ornek GO --Tablo oluşturmak CREATE TABLE Kullanicilar ( KullaniciID [int] NOT NULL, KullaniciAd [nvarchar](50) NULL ) --Tabloya veri insert etmek INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (1,'Yavuz') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (1,'Yavuz') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (2,'Selim') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (3,'Pelin') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (4,'Büşra') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (4,'Büşra') INSERT INTO Kullanicilar (KullaniciID,KullaniciAd) VALUES (4,'Kübra') --Tablodaki fazla kayıtları listelemek SELECT KullaniciID,KullaniciAd,COUNT(KullaniciID) AS FazlaKayıtSayısı FROM Kullanicilar GROUP BY KullaniciID,KullaniciAd HAVING COUNT(KullaniciID) > 1 --Değişken tanımlama DECLARE @ID int DECLARE @Ad NVARCHAR(50) DECLARE @Sayac int --Cursor tanımlama DECLARE DeleteCursor CURSOR FOR SELECT KullaniciID,KullaniciAd,COUNT(KullaniciID) AS FazlaKayıtSayısı FROM Kullanicilar GROUP BY KullaniciID,KullaniciAd HAVING COUNT(KullaniciID) > 1 --Cursor açılması OPEN DeleteCursor --Cursor'un değerler içinde dönmesi FETCH NEXT FROM DeleteCursor INTO @ID,@Ad,@Sayac WHILE @@FETCH_STATUS = 0 BEGIN --Silme işlemi DELETE TOP(@Sayac -1) FROM Kullanicilar WHERE KullaniciID = @ID FETCH NEXT FROM DeleteCursor INTO @ID,@Ad,@Sayac END --Cursor kapatma CLOSE DeleteCursor --Cursor öldürme DEALLOCATE DeleteCursor --Tabloyu listeleme SELECT * FROM Kullanicilar
Yukarıdaki kodlarda veritabanı ve tablo oluşturduk. İçerisine veri insert ettik. Bu verilerden bazıları aynı verilerdi. Bunları silmek için cursor oluşturduk ve bu cursor ile silme işlemini gerçekleştirdik.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.