INSERT deyimi, FOREIGN KEY kısıtlamasıyla çakıştı - SQL Server


225

Aşağıdaki hatayı alıyorum. Lütfen bana yardım eder misiniz?

Msg 547, Seviye 16, Durum 0, Satır 1
INSERT deyimi "FK_Sup_Item_Sup_Item_Cat" FOREIGN KEY kısıtlamasıyla çakıştı. Çakışma "dev_bo" veritabanında, "dbo.Sup_Item_Cat" tablosunda oluştu. Açıklama sona erdirildi.

Kod:

insert into sup_item (supplier_id, sup_item_id, name, sup_item_cat_id, 
                      status_code, last_modified_user_id, last_modified_timestamp, client_id)   
values (10162425, 10, 'jaiso', '123123',
        'a', '12', '2010-12-12', '1062425')

Son sütun client_idhataya neden oluyor. Ben zaten dbo.Sup_Item_Catsup_item karşılık gelen sütun içine değeri koymak için çalıştı .. ama hiçbir sevinç :-(


20
Öğe tablonuza, tablonuzda eşleşen bir kategori kaydı olmayan bir kayıt eklemeye çalıştınız Sup_Item_Cat. Bu konuda söylenecek başka bir şey yok.
Martin Smith

1
Yani SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'sonuç döndürüyor musunuz?
Martin Smith

2
Ayrıca "son coulum" client_id "ben çatışma alıyorum" diyorsun. Hata mesajının ima ettiği bu değil, bence sorununuz için yanlış yere bakıyorsunuz.
Martin Smith

Yanıtlar:


287

Tablonuzda dbo.Sup_Item_Cat, başka bir tabloya yabancı anahtar başvurusu var. Bir FK'nin çalışma şekli, o sütunda başvurulan tablonun birincil anahtar sütununda olmayan bir değere sahip olamamasıdır.

SQL Server Management Studio'nuz varsa, açın ve sp_help' dbo.Sup_Item_Cat'. FK'nin hangi sütuna ve hangi tablonun referans verdiğine bakın. Bazı kötü veriler ekliyorsunuz.

Daha iyi açıklanmış bir şeye ihtiyacınız varsa bana bildirin!


10
Sp_help komutunu eklediğiniz için teşekkür ederiz! Benzer sorunumu daraltmama yardımcı oldu.
Gaʀʀʏ

Gerçekten de - benim durumumda, özellik görünümden denetleyiciye geri gönderilmiyordu, bu yüzden her zaman 0'dı (bu geçerli bir kimlik değildi, ancak denetleyicinin bunu bilmenin hiçbir yolu olmayacaktı.)
neminem

1
Alt + F1 sp_help kısayoludur, futrure okuyucular için tabloyu seçin ve alt + f1 tuşlarına basın
satsvelke

133

Yabancı bir anahtar alanını doldurmaya çalışırken alınan hata mesajıyla ilgili olarak bu sorunu kendim yaşadım. Bu sayfayı, cevabı bulma umuduyla bitirdim. Bu sayfadaki kontrol edilen cevap gerçekten doğrudur, maalesef cevabın SQL'e aşina olmayan insanlar için biraz eksik olduğunu hissediyorum. Kod yazma konusunda oldukça yetenekliyim ama SQL sorguları veritabanı tabloları oluşturmanın yanı sıra benim için yeni.

İşaretli cevabın doğru olmasına rağmen:

Mike M yazdı-

"Bir FK'nin çalışma şekli, bu sütunda başvurulan tablonun birincil anahtar sütununda olmayan bir değere sahip olamamasıdır."

Bu cevapta eksik olan basitçe;

İlk önce Birincil Anahtarı içeren tabloyu oluşturmalısınız.

Bunu söylemenin başka bir yolu;

Yabancı Anahtar içeren alt tabloya veri eklemeye çalışmadan önce Birincil Anahtar içeren üst tabloya Veri Eklemelisiniz.

Kısacası, öğreticilerin birçoğu bu gerçeğin üzerinde cam gibi görünüyor, böylece kendi başınıza denemeniz ve bir operasyon sırası olduğunu fark etmediyseniz, bu hatayı alırsınız. Doğal olarak birincil anahtar verilerini ekledikten sonra, alt tablodaki yabancı anahtar verilerinizin üst tablodaki birincil anahtar alanına uyması gerekir, aksi halde bu hatayı almaya devam edersiniz.

Eğer bu kadar okuyan varsa. Umarım bu kontrol edilen cevabı daha net hale getirmiştir. Bu tür şeylerin oldukça basit olduğunu ve bir kitap açmanın bu soruya gönderilmeden önce cevap vereceğini düşünebilecek bazılarınız olduğunu biliyorum, ama gerçek şu ki, herkes aynı şekilde öğrenmiyor.


AND Ben, her zaman veritabanına olması gerektiğini düşündüğünüzü göndermiyor gibi sorgu profil emin olun.
HLGEM

20

Yabancı anahtar sütununa, yabancı tabloda bulunmayan bir değere sahip bir kayıt eklemeye çalışıyorsunuz.

Örneğin: Kitaplar Yazarlar tablosunda yabancı anahtar kısıtlaması olan Kitaplar ve Yazarlar tablolarınız varsa ve yazar kaydı olmayan bir kitap kaydı eklemeye çalışırsanız.


16

Daha fazla açıklama için ifadenizi göndermeniz gerekir. Fakat...

Bu hata, veri eklediğiniz tablonun başka bir tabloyla yabancı anahtar ilişkisi olduğu anlamına gelir. Veri eklenmeden önce, yabancı anahtar alanındaki değerin önce diğer tabloda bulunması gerekir .


5

Sorun görebildiğim istemci_id ile değil. Görünüşe göre sorun 4. sütunda, sup_item_cat_id

Koşardım

sp_helpconstraint sup_item

ve hangi sorunun asıl sorun olduğunu doğrulamak için yabancı anahtar FK_Sup_Item_Sup_Item_Cat için döndürülen constraint_keys sütununa dikkat edin, ancak düzeltmeye çalıştığınız sütun olmadığından eminim. Ayrıca '123123' şüpheli görünüyor.


5

Bulduğum bir şey, tüm alanların TAM OLARAK eşleşmesi gerektiğiydi.

Örneğin, 'kedi köpeği' göndermek, 'kedi köpeği' göndermekle aynı şey değildir.

Bu sorunu gidermek için ne yaptım veri girdi tablodan FK kodu komut dosyası, kısıtlamaları (benim durumumda 2 vardı) olan "Yabancı Anahtar" not almak ve bu 2 alan değerleri eşleşen emin olmak oldu Tam olarak FK Constraint hatası veren tablodaki gibi.

Sorunlarımı veren 2 alanı düzelttikten sonra hayat iyiydi!

Daha iyi bir açıklamaya ihtiyacınız varsa, bana bildirin.


Bu gerçekten bana yardımcı oldu haha! Bu gerçeği gözden kaçan, yaşadığım bir sorun düzeltildi! Thank you
Johnathan Brown

4

SQL Kodumda da aynı hatayı aldım, Bu çözüm benim için çalışıyor,


Birincil Tablodaki verileri kontrol edin Birincil anahtar sütununda olmayan bir sütun değeri giriyor olabilirsiniz.


3

Tam olarak söylediği anlamına gelir. Arama tablosundaki herhangi bir değerle eşleşmeyen, üzerinde FK kısıtlaması olan bir sütuna değer eklemeye çalışıyorsunuz.


2

Yabancı anahtarın tanımlandığı ilişkideki alanları iki kez kontrol edin. İlişkiyi tanımladığınızda SQL Server Management Studio'nun seçmesini istediğiniz alanlar bulunmamış olabilir. Bu beni geçmişte yaktı.


2
  1. sp_helpconstraint'i çalıştırın
  2. yabancı anahtar için döndürülen constraint_keys sütununa ATTENTION öde

2

Üst tablo verileri eksik soruna neden oluyor. Sorununuzda "dbo.Sup_Item_Cat" içindeki verilerin bulunmaması soruna neden oluyor


1

Bir MVC 5 uygulaması için veritabanımı oluşturmak için ilk kod geçişleri kullandığımda aynı sorun vardı. Sonunda soruna neden olan configuration.cs dosyamdaki seed yöntemini buldum. Tohum yöntemim, eşleşen birincil anahtarla girişi oluşturmadan önce yabancı anahtarı içeren tablo için bir tablo girişi oluşturmaktı.


1

Ekleme değeri alanlarım çıplak gözle görülemeyen sekmeler ve boşluklar içerdiğinde bu sorunla karşılaştım. Excel'de değer listemi oluşturdum, kopyaladım ve SQL'e yapıştırdım ve FK alanlarımdaki eşleşmeleri bulmak için sorgular çalıştırdım.

Maç sorguları FK alanımda sekmeler ve boşluklar tespit etmedi, ancak INSERT bunları tanıdı ve hatayı oluşturmaya devam etti.

FK alanının içeriğini bir kayıtta kopyalayıp ekleme sorgusuna yapıştırarak tekrar test ettim. Bu kayıt da başarısız olduğunda, verilere daha yakından baktım ve son olarak sekmeleri / boşlukları tespit ettim.

Kaldırılan sekmeleri / boşlukları temizledikten sonra sorunum çözüldü. Umarım bu birine yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.