MS SQL Server Eğitimleri 37 – The DELETE Statement Conflicted with The REFERENCE Constraint Hatası Çözümü,

MS SQL eğitimlerimize bir hata çözümü ile devam ediyoruz.

İlişkili veritabanlarımızda silme işlemi yaparken eğer gerekli kuralları ayarlamadı isek şu hatayı alırız.

Elimde var olan ilişkili veri tabanının bir tablosundan bir veri silmek isteyeyim.

 

Böyle bir hata alırım.

 

 

Yani şunu diyor aslında sizin silmeye çalıştığınız bu kaydın, ORDERS tablosunda CUSTOMERID kolonu ile bir bağlantısı var ve siz bunu sadece buradan silerseniz diğer tabloda kalacak ama sistemde böyle bir kişi yokken kişi varmış gibi ORDERS tablosunda kaydı kalacak bizim veri benzersizliği ilkemize aykırı bu o yüzden bu tablodan bu veriyi silemem diyor. Teknik olarak yazılan cümlenin Türkçesi bu.

Şimdi bu durumdan nasıl kurtuluruz onu düşünelim.

Aklımıza şöyle bir şey gelecektir ki bu bu sistemi kuranlarında aklına gelmiş. Eğer ben CUSTOMER tablosundan bir kişiyi silersem bu kişinin ilişkili olduğu tüm tablolardan ona ait kayıtlarda aynı anda silinmesini sağlamalıyım. Bunu nasıl yapacağımıza bakalım.

STEP 1

Var olan diyagram üzerine sağ tıklayıp MODIFY diyoruz.

 

STEP 2

 

STEP 3

Bir biri ile ilişkili olan tablolarda ilişkiler üzerine gelip sağ tıklıyoruz ve Properties diyoruz.

 

STEP 4

Burada DELETE Rule ve UPDATE Rule sekmelerini No Action durumundan CASCADE durumuna çekiyoruz.

Bu adımı değişikliğin ortak olarak uygulanmasını istediğimiz tüm ilişkiler için tekrarlıyoruz.

STEP 5

Sonra diyagramı kaydediyoruz.

İşte bu kadardı şimdi az önce silmeye çalıştığımız kaydı yeniden silmeye çalışalım.

Şimdi şunu yapacağız.

XENONBOX üzerinde CUSTOMER tablosunda var olan Antonio’nun ORDERS tablosunda kaç kaydının olduğuna bakıyoruz. Sonra Antonio’yu sileceğiz ve ORDERS tablosundaki kayıtları kontrol edeceğiz.

Adım adım gidiyoruz.

3 Antonio Moreno Münih Mexico (5) 555-3932

Antonio’nun ID si 3 bu numara ile ORDERS tablosunda bir aratalım.

118 2012-11-27 00:00:00.000 542495 40320.00 3
260 2013-04-15 00:00:00.000 542637 88125.00 3
288 2013-05-13 00:00:00.000 542665 215650.00 3
326 2013-06-19 00:00:00.000 542703 208200.00 3
430 2013-09-22 00:00:00.000 542807 95690.00 3
435 2013-09-25 00:00:00.000 542812 37550.00 3
609 2014-01-28 00:00:00.000 542986 66000.00 3

7 Kaydın olduğunu görüyoruz. Şimdi Antonio’yu silelim.

Şimdi bir daha ORDERS tablosunda Antonio’yu çağıralım bakalım gelecek mi?

İşte başarılı bir şekilde ilişkili tablolarımız arasında silme işlemini gerçekleştirmiş olduk.

Bir sonraki yazımda görüşmek üzere.

Facebook Sayfamizdan Bizleri Takip Edebilirsiniz
Murat Bilginer

Industryolog Akademi Founder – Endüstri Mühendisi
Canias ERP Troia Geliştiricisi & Yazılım Uzmanı
7 Yıldır bildiğini paylaşmak için çabalayan bir blogger.

http://muratbilginer.net/