A tablomuzda ISIM diye bir kolonumuz var ve biz bir kaynaktan bir çok ismi bu tabloya ekleyeceğiz. İşlemi başlattık ve PK_Constraint hatası aldık işlem ROLLBACK edilip insert iptal edilir! İlk aklımıza gelen çözüm ise ..where not exists(.. şeklinde bir kod ile satır ekleyeceğimiz tabloda eklenecek olanın kontrolünü yapıp eğer yok ise satırı ekletmektir.Ancak bu milyona yakın kayıtlarda çok düşük bir performans sergiler.

Çözüm;Milyonlarca kayıdımı A tablosuna ekle ancak aynı isimlerin olması halinde hatayı gözardı et ve o ismi atla diğerine geç.

İşte bunu yapabilmek için PK olan kolonun IGNORE_DUP_KEY özelliğini ONhaline getirmektir.Normal şartlarda PK olan bir alanın bu özelliğini değiştiremeyiz. Oyüzden ilgili PK alanı için bir dizi değişiklik yapacağız.

* ISIM alanının PK sını kaldırmalıyız. (Remove Primary Key),* PK’i kaldırmamızla Uniqued haldeki Clustered Indexde kalkmış olur.* Yani şuan bir insert işlemi yaparsak kayıtları çiftlemiş oluruz üstelik indeximizide kaybettik. Bunu düzeltmek ve kayıt kirliliğine izin vermemek , unique/tekilliği korumak için Index menüsünden ilgili tablonun alanı için (örneğin ISIM alanına) Uniqued , Clustered index ekliyoruz.

Böylece sonuç olarak ilk halde PK olan bir alan ikinci durumda PK değildir ama halen unique/tekil kayıt saklar (hatta halen tekil olmayan bir kayıt işleminde hata verir) ve ilk durumdaki gibi clustered indexe sahipdir.İşte ancak bu durumda ISIM alanının IGNORE_DUP_KEY özelliğini ON olarak değiştirebiliriz. Yani kayıt çiftlemesindeki Error mesajını gözardı et demiş olucaz.

Bunu yapmak içinde QUERY ekranında,ALTER INDEX IndexIsmi ONdbo.TabloIsmiREBUILD WITH(IGNORE_DUP_KEY = ON )–Default da OFF dur ve buda PK_Constraint hatası verip–Insert işlemini Rollback yapmasına neden olur–veya rebuild yerineSET (IGNORE_DUP_KEY = ON ) ;
çalıştırırız.Artık bundan sonra yapacağınız insert işlemlerinde tabloda aynı kayıt varsa PK_Constraint hatası yüzünden işlem sonlandırılıp tüm insert rollback edilmez , ilgili satır atlanır ve kayıt işlemine devam edilir.