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

ExceptionLimeCat
sumber
1
Bisakah Anda memberikan skema dua tabel Anda?
Stefan H
lihat tautan ini stackoverflow.com/questions/35196951/…
Jigar Darji

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);
BluesRockAddict
sumber
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
lihat tautan ini stackoverflow.com/questions/35196951/…
Jigar Darji
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" 
marc_s
sumber
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)
Venkatesh Bandarapu
sumber
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
Sandy bhardwaj
sumber
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

Siva Ramakrishna
sumber
0

Di masa depan.

ALTER TABLE Employees
ADD UserID int;

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