Saya punya masalah ketika mencoba menambahkan kunci asing ke tblDomare
meja saya ; apa yang saya lakukan salah di sini?
CREATE TABLE tblDomare
(PersNR VARCHAR (15) NOT NULL,
fNamn VARCHAR (15) NOT NULL,
eNamn VARCHAR (20) NOT NULL,
Erfarenhet VARCHAR (5),
PRIMARY KEY (PersNR));
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (6811034679,'Bengt','Carlberg',10);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (7606091347,'Josefin','Backman',4);
INSERT INTO tblDomare (PersNR,fNamn,eNamn,Erfarenhet)
Values (8508284163,'Johanna','Backman',1);
CREATE TABLE tblBana
(BanNR VARCHAR (15) NOT NULL,
PRIMARY KEY (BanNR));
INSERT INTO tblBana (BanNR)
Values (1);
INSERT INTO tblBana (BanNR)
Values (2);
INSERT INTO tblBana (BanNR)
Values (3);
ALTER TABLE tblDomare
ADD FOREIGN KEY (PersNR)
REFERENCES tblBana(BanNR);
Pesan eror:
Pernyataan ALTER TABLE bertentangan dengan batasan ASING "FK_ tblDomare _PersN__5F7E2DAC". Konflik terjadi di database "almu0004", tabel "dbo.tblBana", kolom 'BanNR'.
sql
sql-server
database
pengguna3162932
sumber
sumber
Permintaan ini sangat berguna bagi saya. Ini menunjukkan semua nilai yang tidak memiliki kecocokan
sumber
Coba solusi ini:
sumber
Dimungkinkan untuk membuat kunci asing menggunakan tablename ALTER TABLE WITH NOCHECK ..., yang akan memungkinkan data yang melanggar kunci asing.
"ALTER TABLE tablename WITH NOCHECK ..." pilihan untuk menambahkan FK - Solusi ini berhasil untuk saya.
sumber
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) @JoinTable(name = "tbUsuariosTipoOcorrencia", joinColumns = { @JoinColumn(name = "idUsuario") }, inverseJoinColumns = { @JoinColumn(name = "idTipoOcorrencia") })
dan saya melakukan ini menyelesaikan melalui query database:alter table tbUsuariosTipoOcorrencia WITH NOCHECK add constraint FKnbxg3ua7b8c5d53wps69q6jh foreign key (idUsuario) references tbUsuarios
Saya kira, nilai kolom dalam tabel kunci asing harus cocok dengan nilai kolom dari tabel kunci utama. Jika kita mencoba membuat batasan kunci asing antara dua tabel di mana nilai di dalam satu kolom (akan menjadi kunci asing) berbeda dari nilai kolom dari tabel kunci utama maka itu akan membuang pesan.
Jadi selalu disarankan untuk memasukkan hanya nilai-nilai itu di kolom kunci Asing yang ada di kolom tabel kunci Utama.
Misalnya Jika kolom tabel utama memiliki nilai 1, 2, 3 dan di kolom kunci asing nilai yang dimasukkan berbeda, maka kueri tidak akan dieksekusi karena mengharapkan nilai antara 1 & 3.
sumber
Sebelum Anda menambahkan kunci Asing ke tabel, lakukan hal berikut
Jika tabel berisi tidak pergi ke desain dan perubahan, lakukan secara manual.
ubah tabel Tabel 1 tambahkan referensi kunci asing (Nama Kolom) Tabel 2 (Nama Kolom)
ubah tabel Tabel 1 ubah kolom Atribut Nama Kolom bukan nol
sumber
Bersihkan data Anda dari tabel Anda dan kemudian buat hubungan di antara mereka.
sumber
Coba
DELETE
data saat ini daritblDomare.PersNR
. Karena nilai dalamtblDomare.PersNR
tidak cocok dengan nilai apa pun ditblBana.BanNR
.sumber
saya memiliki kesalahan ini juga ketika Smutje direferensikan memastikan bahwa Anda tidak memiliki nilai dalam kolom kunci asing dari tabel kunci asing asing Anda yang tidak ada dalam tabel referensi Anda yaitu (setiap nilai dalam tabel kunci asing asing Anda (nilai kolom yang kunci asing) juga harus ada di kolom tabel referensi Anda) sebaiknya dikosongkan dari tabel kunci asing dasar Anda terlebih dahulu kemudian atur kunci asing
sumber
data yang Anda masukkan tabel (tbldomare) tidak cocok dengan data yang telah Anda tetapkan tabel kunci primer. tulis di antara tbldomare dan tambahkan kata ini (dengan nocheck) kemudian jalankan kode Anda.
misalnya Anda memasukkan tabel untuk data ini
dan Anda menetapkan
foreign key
tabel untuk menerima saja1,2,3
.Anda memiliki dua solusi, satu adalah menghapus data yang telah Anda masukkan dalam tabel, kemudian jalankan kodenya. lain adalah menulis kata ini (dengan nocheck) letakkan di antara nama tabel Anda dan tambahkan seperti ini
sumber
Ini terjadi pada saya, karena saya sedang merancang database saya, saya perhatikan bahwa saya mengubah benih saya di tabel utama saya, sekarang tabel relasional tidak memiliki kunci asing di tabel utama.
Jadi saya harus memotong kedua tabel, dan sekarang berfungsi!
sumber
Anda harus melihat apakah tabel Anda memiliki data di baris. Jika "ya" maka Anda harus memotong tabel (s) atau Anda dapat membuat mereka memiliki jumlah data yang sama pada
tblDomare.PersNR
ketblBana.BanNR
dan catok-ayat.sumber
Smutje benar dan Chad HedgeCock menawarkan contoh yang bagus bagi orang awam. Saya ingin membangun contoh Chad dengan menawarkan cara untuk menemukan / menghapus catatan-catatan itu. Kami akan menggunakan Pelanggan sebagai Orang Tua dan Pesanan sebagai anak. CustomerId adalah bidang yang umum.
jika Anda membaca utas ini ... Anda akan mendapatkan hasil. Ini adalah anak-anak yatim. pilih * dari Orde Anak kiri bergabung dengan Induk Pelanggan di Child.CustomerId = Parent.CustomerId di mana Parent.CustomerId adalah nol. Perhatikan jumlah baris di kanan bawah.
Pergi memverifikasi tanpa siapa pun yang Anda butuhkan sehingga Anda akan menghapus baris ini!
Jalankan bit pertama. Periksa jumlah baris itu = apa yang Anda harapkan
melakukan tran
Hati-hati. Pemrograman seseorang yang ceroboh membuat Anda terlibat dalam kekacauan ini. Pastikan Anda memahami alasannya sebelum Anda menghapus anak yatim. Mungkin orang tua perlu dipulihkan.
sumber
Dalam skenario saya, menggunakan EF, setelah mencoba membuat Kunci Asing baru ini pada data yang ada, saya salah mencoba untuk mengisi data (membuat tautan) SETELAH membuat kunci asing.
Cara mengatasinya adalah mengisi data Anda sebelum membuat kunci asing karena memeriksa semuanya untuk melihat apakah tautan tersebut memang valid. Jadi itu tidak mungkin bekerja jika Anda belum mengisinya.
sumber
Saya menemukan beberapa masalah dalam proyek saya.
Di tabel anak, tidak ada catatan Id sama dengan 1 dan 11
Saya memasukkan tabel DEAL_ITEM_THIRD_PARTY_PO yang Idnya sama dengan 1 dan 11 maka saya bisa membuat FK
sumber
Pertama-tama hapus data dari tabel itu dan kemudian jalankan migrasi lagi. Anda akan mendapatkan kesuksesan
sumber
Ketika Anda mendefinisikan Kunci Asing di tabel B referensi Kunci Utama tabel A itu berarti bahwa ketika nilai dalam B, itu harus dalam A. Ini untuk mencegah modifikasi yang tidak konsisten ke tabel.
Dalam contoh Anda, tabel Anda berisi:
tblDomare dengan
PRIMARY KEY (PersNR)
:tblBana:
Pernyataan ini:
mengatakan bahwa setiap baris
tblDomare
dengan kunciPersNR
harus memiliki korespondensi dalam tabeltblBana
pada kunciBanNR
. Kesalahan Anda adalah karena Anda memiliki garis yang dimasukkantblDomare
tanpa ada korespondensi ditblBana
.2 solusi untuk mengatasi masalah Anda: - tambahkan baris
tblBana
denganBanNR in (6811034679, 7606091347, 8508284163) - or remove all lines in
tblDomarethat have no correspondance in
tblBana` (tetapi meja Anda akan kosong)Saran umum : Anda harus memiliki batasan Kunci Asing sebelum mengisi tabel. Kunci asing di sini untuk mencegah pengguna tabel dari mengisi tabel dengan inkonsistensi.
sumber
dan hanya FYI, jika Anda melakukan semua pemeriksaan referensi data Anda dan tidak menemukan data yang buruk ... ternyata tidak mungkin untuk membuat batasan kunci asing antara dua tabel dan bidang di mana bidang tersebut adalah kunci utama di kedua tabel! Jangan tanya saya bagaimana saya tahu ini.
sumber