SQL Tambahkan kunci asing ke kolom yang ada


110

Jika saya menggunakan perintah SQL berikut di SQL Server 2008 untuk memperbarui tabel dengan batasan kunci asing:

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)
REFERENCES ActiveDirectories(id)

UserIDmenjadi kolom FK saya di Employeestabel. Saya mencoba merujuk UserIDpada ActiveDirectoriestabel saya . Saya menerima kesalahan ini:

'UserID' kunci asing merujuk pada kolom 'UserID' yang tidak valid dalam tabel referensi 'Karyawan'.


1
Bisakah Anda memberikan skema dua tabel Anda?
Stefan H

Jawaban:


191

Kesalahan menunjukkan bahwa tidak ada kolom UserID di tabel karyawan Anda. Coba tambahkan kolom terlebih dahulu dan kemudian jalankan kembali pernyataan tersebut.

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);

Ini benar. DB kami tidak memperbarui kolom add kami. Ini telah diselesaikan tetapi kolom kami tidak ditetapkan, saya masih tidak dapat menambahkan batasan. There are no primary or candidate keys in the referenced table 'ActiveDirectories' that match the referencing column list in the foreign key 'FK__Employees__UserI__04E4BC85'.
ExceptionLimeCat

Sepertinya kolom mana saja yang direferensikan oleh FK__Employees__UserI__04E4BC85 tidak didefinisikan sebagai PRIMARY KEY atau kandidat kunci dalam tabel ActiveDirectories.
BluesRockAddict

ya tapi sudah pasti PK kami di tabel ActiveDirectories
ExceptionLimeCat

1
TERSELESAIKAN: Ada alasan mengapa Anda membuat ERD dan membangun hubungan sebelum membangun. Kami memiliki terlalu banyak rekaman dalam satu tabel yang menyebabkan kesalahan saat mencoba membuat hubungan ke tabel lain. Terima kasih semuanya.
ExceptionLimeCat


19

Mungkin Anda mendapatkan kolom Anda mundur ??

ALTER TABLE Employees
ADD FOREIGN KEY (UserID)           <-- this needs to be a column of the Employees table
REFERENCES ActiveDirectories(id)   <-- this needs to be a column of the ActiveDirectories table

Mungkinkah kolom itu disebut IDdi Employeestabel, dan UserIDdi ActiveDirectoriestabel?

Maka perintah Anda harus:

ALTER TABLE Employees
ADD FOREIGN KEY (ID)                   <-- column in table "Employees"
REFERENCES ActiveDirectories(UserID)   <-- column in table "ActiveDirectories" 

1
Saya tahu ini aneh tapi sayangnya nama dalam id tabel ActiveDirectory
ExceptionLimeCat

5

Akses MySQL / SQL Server / Oracle / MS:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

Untuk mengizinkan penamaan batasan FOREIGN KEY, dan untuk menentukan batasan FOREIGN KEY pada beberapa kolom, gunakan sintaks SQL berikut:

Akses MySQL / SQL Server / Oracle / MS:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

1
ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyBook
FOREIGN KEY FacId
REFERENCES Book Book_Id

ALTER TABLE Faculty 
WITH CHECK ADD  CONSTRAINT FKFacultyStudent 
FOREIGN KEY FacId
REFERENCES Student StuId

5
Anda harus memberikan beberapa penjelasan dengan jawaban Anda
fen1x

0

cara pembuatan kunci asing yang benar untuk ActiveDirectories (id), saya pikir kesalahan utamanya adalah Anda tidak menyebutkan kunci utama untuk id di tabel ActiveDirectories


0

Di masa depan.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.