SQL मौजूदा कॉलम में विदेशी कुंजी जोड़ें


110

यदि मैं SQL Server 2008 में एक विदेशी कुंजी बाधा के साथ तालिका को अद्यतन करने के लिए निम्न SQL कमांड का उपयोग कर रहा हूं:

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

UserIDEmployeesतालिका में मेरा FK कॉलम होना । मैं UserIDअपनी ActiveDirectoriesतालिका में संदर्भ देने का प्रयास कर रहा हूं । मुझे यह त्रुटि मिली:

विदेशी कुंजी 'UserID' संदर्भ तालिका 'कर्मचारी' में अमान्य कॉलम 'UserID' का संदर्भ देती है।


1
क्या आप अपनी दो तालिका का स्कीमा प्रदान कर सकते हैं?
स्टीफन एच

इस लिंक का उल्लेख stackoverflow.com/questions/35196951/...
जिगर Darji

जवाबों:


191

त्रुटि इंगित करती है कि आपके कर्मचारी तालिका में कोई उपयोगकर्ताआईडी कॉलम नहीं है। पहले कॉलम को जोड़ने का प्रयास करें और फिर कथन को फिर से चलाएँ।

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

यह सही था। हमारा DB हमारे ऐड कॉलम को अपडेट नहीं कर रहा था। यह हल हो गया है लेकिन ऐसा नहीं है कि हमारा कॉलम स्थापित है मैं अभी भी बाधा नहीं जोड़ सकता। 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

जो भी कॉलम FK__Employees__UserI__04E4BC85 द्वारा संदर्भित है, वह ActiveDirectories तालिका में प्राथमिक कुंजी या उम्मीदवार कुंजी के रूप में परिभाषित नहीं किया गया है।
BluesRockAddict 20

हाँ, लेकिन यह निश्चित रूप से ActiveDirectories तालिका में हमारा PK है
ExceptionLimeCat

1
RESOLVED: एक कारण है कि आप ईआरडी बनाते हैं और निर्माण से पहले संबंध स्थापित करते हैं। हमारे पास एक तालिका में बहुत सारे रिकॉर्ड थे, जिससे दूसरी तालिका में संबंध बनाने में त्रुटि हुई। सबको शुक्रीया।
ExceptionLimeCat

इस लिंक का उल्लेख stackoverflow.com/questions/35196951/...
जिगर Darji

19

हो सकता है कि आपको अपने कॉलम पीछे की ओर मिले हों ??

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

यह हो सकता है कि स्तंभ कहा जाता है IDमें Employeesमेज, और UserIDमें ActiveDirectoriesतालिका?

तब आपकी आज्ञा होनी चाहिए:

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

1
मैं इसके अजीब लेकिन दुर्भाग्य से ActiveDirectory टेबल आईडी में नाम जानता हूं
ExceptionLimeCat

5

MySQL / SQL सर्वर / Oracle / MS एक्सेस:

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

एक फॉरेस्ट कुंजी बाधा के नामकरण की अनुमति देने के लिए, और कई स्तंभों पर एक फॉरेस्ट कुंजी बाधा को परिभाषित करने के लिए, निम्न SQL सिंटैक्स का उपयोग करें:

MySQL / SQL सर्वर / 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
आपको अपने उत्तर के साथ कुछ स्पष्टीकरण देना चाहिए
fen1x

0

ActiveDirectories (id) के लिए विदेशी कुंजी निर्माण का तरीका सही है, मुझे लगता है कि आपने मुख्य त्रुटि ActiveDirectories तालिका में id के लिए प्राथमिक कुंजी का उल्लेख नहीं किया है


0

भविष्य में।

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.