এসকিউএল বিদ্যমান কলামে বিদেশী কী যুক্ত করে


110

আমি যদি বিদেশী কী বাধা সহ একটি টেবিল আপডেট করতে এসকিউএল সার্ভার ২০০৮-এ নিম্নলিখিত এসকিউএল কমান্ডটি ব্যবহার করি:

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

UserIDEmployeesটেবিলে আমার এফকে কলাম হচ্ছে । আমি UserIDআমার ActiveDirectoriesটেবিলে রেফারেন্স দেওয়ার চেষ্টা করছি । আমি এই ত্রুটিটি পেয়েছি:

বিদেশী কী 'ইউজারআইডি' রেফারেন্সিং সারণিতে 'কর্মচারী' অবৈধ কলাম 'ইউজারআইডি' উল্লেখ করে।


1
আপনি আপনার দুটি টেবিলের স্কিমা সরবরাহ করতে পারেন?
স্টিফান এইচ

উত্তর:


191

ত্রুটিটি নির্দেশ করে যে আপনার কর্মচারীদের সারণীতে কোনও ইউজারআইডি কলাম নেই। প্রথমে কলাম যুক্ত করার চেষ্টা করুন এবং তারপরে বিবৃতিটি আবার চালান।

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

এটা সঠিক ছিল। আমাদের ডিবি আমাদের অ্যাড কলামটি আপডেট করে নি। এটি সমাধান করা হয়েছে তবে এটি নয় যে আমাদের কলামটি প্রতিষ্ঠিত হয়েছে আমি এখনও সীমাবদ্ধতাটি যুক্ত করতে পারি না। 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'.
ব্যতিক্রম

দেখে মনে হচ্ছে যে কোনও কলামই FK__Employees__UserI__04E4BC85 দ্বারা রেফারেন্স করা হয়েছে, অ্যাক্টিভ ডিরেক্টরি নির্দেশিকায় সারণীতে প্রাথমিক কী বা প্রার্থী কী হিসাবে সংজ্ঞায়িত হয়নি।
ব্লুজরকএডিক্ট

হ্যাঁ কিন্তু এটা স্পষ্টভাবে ActiveDirectories টেবিলে আমাদের পি কে হয়
ExceptionLimeCat

1
সমাধান: আপনি ERD তৈরি করার আগে এবং সম্পর্ক স্থাপনের আগে সম্পর্ক স্থাপন করার একটি কারণ রয়েছে। একটি টেবিলে আমাদের প্রচুর রেকর্ড রয়েছে যা অন্য টেবিলের সাথে সম্পর্ক তৈরি করার চেষ্টা করে একটি ত্রুটি সৃষ্টি করেছিল। সবাইকে ধন্যবাদ.
ব্যতিক্রম


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

মাইএসকিউএল / এসকিউএল সার্ভার / ওরাকল / এমএস অ্যাক্সেস:

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

বিদেশী কী সীমাবদ্ধতার নামকরণের অনুমতি দিতে এবং একাধিক কলামে একটি বিদেশী কী সীমাবদ্ধতার সংজ্ঞা দেওয়ার জন্য, নিম্নলিখিত এসকিউএল সিনট্যাক্সটি ব্যবহার করুন:

মাইএসকিউএল / এসকিউএল সার্ভার / ওরাকল / এমএস অ্যাক্সেস:

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

অ্যাক্টিভ ডিরেক্টরীরিজ (আইডি) এর জন্য বৈদেশিক কী তৈরির পদ্ধতি সঠিক, আমি মনে করি যে প্রধান ভুলটি হল আপনি অ্যাক্টিভ ডিরেক্টরি নির্দেশিকায় আইডির জন্য প্রাথমিক কী উল্লেখ করেন নি


0

ভবিষ্যতে।

ALTER TABLE Employees
ADD UserID int;

ALTER TABLE Employees
ADD CONSTRAINT FK_ActiveDirectories_UserID FOREIGN KEY (UserID)
    REFERENCES ActiveDirectories(id);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.