SQL Mevcut sütuna yabancı anahtar ekle


110

Yabancı anahtar kısıtlaması olan bir tabloyu güncellemek için SQL Server 2008'de aşağıdaki SQL komutunu kullanıyorsam:

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

UserIDEmployeestablodaki FK sütunum . Ben başvurmak çalışıyorum UserIDbenim de ActiveDirectoriesmasaya. Bu hatayı alıyorum:

Yabancı anahtar 'Kullanıcı Kimliği', 'Çalışanlar' tablosuna referans veren geçersiz 'Kullanıcı Kimliği' sütununa başvuruyor.


1
İki tablonuzun şemasını sağlayabilir misiniz?
Stefan H

Yanıtlar:


191

Hata, Çalışanlar tablonuzda hiçbir UserID sütunu olmadığını gösterir. Önce sütunu eklemeyi deneyin ve ardından ifadeyi yeniden çalıştırın.

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

Bu doğruydu. DB'miz ekleme sütunumuzu güncellemiyordu. Bu çözüldü ama bizim sütunumuz kurulmadığından hala kısıtlama ekleyemiyorum. 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

Görünüşe göre, FK__Employees__UserI__04E4BC85 tarafından hangi sütuna başvurulursa, ActiveDirectories tablosunda PRIMARY KEY veya aday anahtar olarak tanımlanmamıştır.
BluesRockAddict

evet ama bu kesinlikle ActiveDirectories tablosundaki PK'mız
ExceptionLimeCat

1
ÇÖZÜLDÜ: ERD'ler oluşturmanız ve oluşturmadan önce ilişkiler kurmanızın bir nedeni var. Bir tabloda çok fazla kayıt vardı ve bu da diğer tabloyla ilişkileri oluşturmaya çalışırken bir hataya neden oldu. Hepinize teşekkürler.
ExceptionLimeCat


19

Belki sütunlarınızı tersten almışsınızdır?

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

O sütun denir olabilir IDde Employeesmasa ve UserIDiçinde ActiveDirectoriesmasaya?

O zaman emriniz şöyle olmalıdır:

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

1
Garip olduğunu biliyorum ama ne yazık ki ActiveDirectory tablo kimliğindeki ad
ExceptionLimeCat

5

MySQL / SQL Sunucusu / Oracle / MS Erişimi:

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

Bir FOREIGN KEY kısıtlamasının adlandırılmasına izin vermek ve birden çok sütunda bir FOREIGN KEY kısıtlaması tanımlamak için aşağıdaki SQL sözdizimini kullanın:

MySQL / SQL Sunucusu / Oracle / MS Erişimi:

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
Cevabınızla birlikte bir açıklama sağlamalısınız
fen1x

0

ActiveDirectories (id) için doğru yabancı anahtar oluşturma yolu, bence asıl hata, ActiveDirectories tablosunda id için birincil anahtardan bahsetmemiş olmanızdır.


0

Gelecekte.

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
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.