ie8.3

23/10/2007 - Duplicate Kayıtları Silme İşlemi

Kategori: sql server

Aşağıdaki sp; çalıştığım bir projede, veritabanında yer alan duplicate kayıtların sadece bir tanesinin kalıp, diğerlerinin silinmesini sağlayan bir sp idi.

Şimdi biraz daha düzenleyip, biraz daha anlaşılır hale getirmiş şekilde buraya ekliyorum. Umarım birilerinin işine yarar.

“SEARCH” tablosunda aynı “CODE” değerine sahip iki ya da daha fazla kayıt yer almasını istemiyorum.

Bunun için ilk olarak; SEARCH tablosundaki değerleri CODE değerine göre sıralayarak alıyorum. Böylece aynı CODE değerine sahip kayıtlar alt alta gelmiş olacak. Ben de ilk kayıda karışmayıp diğerlerini silecem.

Peki bunu nasıl yapacam. Burada rowcount parametresini kullanıyorum. Rowcount parametresi yapacağınız bir işlemden kaç kayıtın etkileneceğini gösterir.Böylece delete işlemi sırasında tüm kayıtlar değil, sadece 1 kayıt silinmiş olunacak. Dolayısıyla; aynı CODE değerine sahip diyelim ki 4 kaydım var her defasında sadece 1 tanesi silinecek. Ve en son 4 kayıttan elimde 1 kayıt kalmış olacaktır.

Alt alta gelen 2 kaydın aynı CODE değerine sahip olup olmadığı bilgisini ise; değerleri değişkenlerde tutup, birbirleri ile karşılaştırmak suretiyle elde ediyorum.

 

 

DECLARE @code_ float,

DECLARE @code_1 float,

DECLARE crSearch CURSOR FOR

SELECT CODE FROM SEARCH ORDER BY CODE

 

OPEN crSearch

FETCH NEXT FROM crSearch INTO @code_

set @code_1 = @code_

fetch next from crSearch into @code_

 

SET ROWCOUNT 1  --Bundan sonraki işlemlerden sadece 1 kayıt etkilenecek.

WHILE @@FETCH_STATUS=0

BEGIN

      if @code_1=@code_

--Eğer bu eşitlik doğru ise dublicate kayıt var demektir.1 tanesi

--siliniyor.

            begin

                  delete from SEARCH where CODE=@code_

                  print ' kayıt silindi...'

            end

      else

            begin

                  set @code_1 = @code_

            end  

      fetch next from crSearch into @code_

END  

 

CLOSE crSearch

DEALLOCATE crSearch

--Hepsi Bu İşte!

EkleBunu Sosyal Paylaşım Butonu
Yorum yaz!

<- Son Sayfa :: ->

Hakkımda

Bağlantılar

Ana Sayfa
Profilim
Arşiv

Kategoriler

Arkadaşlarım