Pernyataan INSERT bertentangan dengan batasan ASING - SQL Server

225

Saya mendapatkan kesalahan berikut. Bisakah bantu saya?

Msg 547, Level 16, State 0, Line 1
Pernyataan INSERT bertentangan dengan batasan KUNCI ASING "FK_Sup_Item_Sup_Item_Cat". Konflik terjadi di database "dev_bo", table "dbo.Sup_Item_Cat". Pernyataan itu telah dihentikan.

Kode:

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')

Kolom terakhir client_idmenyebabkan kesalahan. Saya mencoba untuk meletakkan nilai yang sudah ada di dbo.Sup_Item_Catdalam kolom, sesuai dengan sup_item .. tetapi tidak ada sukacita :-(

SmartestVEGA
sumber
20
Anda telah mencoba memasukkan catatan ke tabel item Anda yang tidak memiliki catatan kategori yang cocok di Sup_Item_Cattabel Anda . Tidak banyak lagi yang bisa dikatakan tentang itu.
Martin Smith
1
Jadi Anda mengatakan bahwa SELECT * FROM Sup_Item_Cat WHERE sup_item_cat_id = '123123'mengembalikan hasil?
Martin Smith
2
Anda juga mengatakan "coulum terakhir" client_id "saya mendapatkan konflik." Ini bukan apa yang tersirat dari pesan kesalahan. Saya pikir Anda mencari di tempat yang salah untuk masalah Anda.
Martin Smith

Jawaban:

287

Di meja Anda dbo.Sup_Item_Cat, ini memiliki referensi kunci asing ke tabel lain. Cara kerja FK adalah tidak dapat memiliki nilai di kolom itu yang tidak juga di kolom kunci utama dari tabel yang direferensikan.

Jika Anda memiliki SQL Server Management Studio, buka dan sp_help' dbo.Sup_Item_Cat'. Lihat kolom tempat FK berada, dan kolom mana tabel yang dirujuk. Anda memasukkan beberapa data buruk.

Beri tahu saya jika Anda perlu penjelasan lebih baik!

Mike M.
sumber
10
Terima kasih telah memasukkan perintah sp_help! Membantu saya mempersempit masalah saya yang serupa.
Gaʀʀʏ
Memang - dalam kasus saya, properti itu tidak dikirim kembali dari tampilan ke controller, jadi selalu 0 (yang bukan id yang valid, tetapi controller tidak memiliki cara untuk mengetahui hal itu.)
neminem
1
Alt + F1 adalah jalan pintas untuk sp_help, untuk pembaca masa depan, pilih tabel dan tekan alt + f1
satsvelke
133

Saya memiliki masalah ini sendiri, mengenai pesan kesalahan yang diterima mencoba mengisi bidang kunci asing. Saya berakhir di halaman ini dengan harapan menemukan jawabannya. Jawaban yang diperiksa pada halaman ini memang yang benar, sayangnya saya merasa bahwa jawabannya agak tidak lengkap untuk orang-orang yang tidak terbiasa dengan SQL. Saya cukup pintar dalam menulis kode tetapi pertanyaan SQL baru bagi saya serta membangun tabel database.

Meskipun jawaban yang diperiksa benar:

Mike M menulis-

"Cara kerja FK adalah tidak dapat memiliki nilai di kolom itu yang tidak juga di kolom kunci utama dari tabel yang direferensikan."

Apa yang hilang dari jawaban ini adalah sederhana;

Anda harus membuat tabel yang berisi Kunci Utama terlebih dahulu.

Cara lain untuk mengatakannya adalah;

Anda harus memasukkan data ke dalam tabel induk, yang berisi kunci utama, sebelum mencoba memasukkan data ke dalam tabel anak yang berisi kunci asing.

Singkatnya, banyak tutorial tampaknya membahas fakta ini sehingga jika Anda mencoba sendiri dan tidak menyadari ada urutan operasi, maka Anda akan mendapatkan kesalahan ini. Secara alami setelah menambahkan data kunci utama, data kunci asing Anda di tabel anak harus sesuai dengan bidang kunci utama di tabel induk, jika tidak, Anda masih akan mendapatkan kesalahan ini.

Jika ada yang membaca sejauh ini. Saya harap ini membantu membuat jawaban yang diperiksa lebih jelas. Saya tahu ada beberapa di antara Anda yang mungkin merasa bahwa hal semacam ini cukup mudah dan membuka buku akan menjawab pertanyaan ini sebelum diposting, tetapi kenyataannya adalah tidak semua orang belajar dengan cara yang sama.

plasmasnakeneo
sumber
Dan saya akan menambahkan, pastikan untuk profil permintaan Anda karena tidak selalu mengirimkan apa yang Anda pikir seharusnya ke database.
HLGEM
20

Anda mencoba menyisipkan catatan dengan nilai di kolom kunci asing yang tidak ada di tabel asing.

Misalnya: Jika Anda memiliki tabel Buku dan Penulis di mana Buku memiliki batasan kunci asing pada tabel Penulis dan Anda mencoba untuk memasukkan catatan buku yang tidak ada catatan penulisnya.

Matthew Smith
sumber
16

Anda harus memposting pernyataan Anda untuk klarifikasi lebih lanjut. Tapi...

Kesalahan itu berarti bahwa tabel tempat Anda memasukkan data memiliki hubungan kunci asing dengan tabel lain. Sebelum data dapat dimasukkan, nilai dalam bidang kunci asing harus ada di tabel lainnya terlebih dahulu.

Justin Niessner
sumber
5

Masalahnya bukan dengan client_id dari apa yang bisa saya lihat. Sepertinya masalah dengan kolom ke-4, sup_item_cat_id

Aku akan lari

sp_helpconstraint sup_item

dan perhatikan kolom constraint_keys yang dikembalikan untuk kunci asing FK_Sup_Item_Sup_Item_Cat untuk mengonfirmasi kolom mana yang merupakan masalah aktual, tetapi saya cukup yakin bukan kolom yang sedang Anda coba perbaiki. Selain itu '123123' juga terlihat mencurigakan.

Cobusve
sumber
5

Sesuatu yang saya temukan adalah bahwa semua bidang harus cocok dengan PERSIS.

Misalnya, mengirim 'dog cat' tidak sama dengan mengirim 'catdog'.

Apa yang saya lakukan untuk memecahkan masalah ini adalah untuk skrip kode FK dari tabel saya memasukkan data ke dalam, perhatikan "Kunci Asing" yang memiliki kendala (dalam kasus saya ada 2) dan pastikan 2 nilai bidang yang cocok PERSIS karena mereka berada di meja yang melemparkan kesalahan Kendala FK.

Setelah saya memperbaiki 2 bidang memberikan masalah saya, hidup itu baik!

Jika Anda membutuhkan penjelasan yang lebih baik, beri tahu saya.

John Waclawski
sumber
Ini sangat membantu saya haha! Mengabaikan fakta ini, memperbaiki masalah yang saya miliki! Terima kasih
Johnathan Brown
4

Saya juga mendapat kesalahan yang sama dalam Kode SQL saya, Solusi ini berfungsi untuk saya,


Periksa data di Tabel Utama Mungkin Anda memasukkan nilai kolom yang tidak ada di kolom kunci utama.

Chandan Kumar
sumber
3

Artinya persis seperti yang dikatakannya. Anda mencoba menyisipkan nilai ke dalam kolom yang memiliki batasan FK di atasnya yang tidak cocok dengan nilai apa pun di tabel pencarian.

Donnie
sumber
2

Periksa bidang dalam hubungan kunci asing didefinisikan untuk. SQL Server Management Studio mungkin tidak memiliki bidang yang Anda inginkan dipilih ketika Anda mendefinisikan hubungan. Ini telah membakar saya di masa lalu.

pengguna1424678
sumber
2
  1. jalankan sp_helpconstraint
  2. bayar PERHATIAN ke kolom constraint_keys yang dikembalikan untuk kunci asing
dotnet
sumber
2

Data tabel induk yang hilang menyebabkan masalah. Dalam masalah Anda, tidak tersedianya data dalam "dbo.Sup_Item_Cat" menyebabkan masalah

sathish
sumber
1

Saya memiliki masalah yang sama ketika saya menggunakan migrasi code-first untuk membangun database saya untuk aplikasi MVC 5. Saya akhirnya menemukan metode seed di file configuration.cs saya yang menyebabkan masalah. Metode seed saya adalah membuat entri tabel untuk tabel yang berisi kunci asing sebelum membuat entri dengan kunci utama yang cocok.

Paulie22
sumber
1

Saya mengalami masalah ini ketika bidang nilai sisipan saya berisi tab dan spasi yang tidak terlihat dengan mata telanjang. Saya telah membuat daftar nilai saya di Excel, menyalin, dan menempelkannya ke SQL, dan menjalankan kueri untuk menemukan ketidakcocokan pada bidang FK saya.

Kueri pertandingan tidak mendeteksi ada tab dan spasi di bidang FK saya, tetapi INSERT mengenali mereka dan terus menghasilkan kesalahan.

Saya menguji lagi dengan menyalin konten bidang FK dalam satu catatan dan menempelkannya ke dalam kueri sisipan. Ketika catatan itu juga gagal, saya melihat lebih dekat pada data dan akhirnya mendeteksi tab / spasi.

Setelah saya membersihkan tab / spasi yang dihapus, masalah saya teratasi. Semoga ini bisa membantu seseorang!

Nyonya
sumber