কীভাবে আমি এসকিউএল সার্ভারে একটি বিদেশী কী ড্রপ করব?


201

আমি একটি বিদেশী কী তৈরি করেছি (এসকিউএল সার্ভারে) এর দ্বারা:

alter table company add CountryID varchar(3);
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country;

আমি তখন এই ক্যোয়ারী চালাচ্ছি:

alter table company drop column CountryID;

এবং আমি এই ত্রুটি পেয়েছি:

এমএসজি 5074, স্তর 16, রাজ্য 4, লাইন 2
অবজেক্ট 'Company_CountryID_FK' কলাম 'কান্ট্রিআইডি' এর উপর নির্ভরশীল।
এমএসজি 4922, স্তর 16, রাজ্য 9, লাইন 2
টেবিলের ড্রপ কলম কান্ট্রিআইডি ব্যর্থ হয়েছে কারণ এক বা একাধিক বস্তু এই কলামটিতে অ্যাক্সেস করেছে

আমি এটি চেষ্টা করেছি, তবুও এটি কাজ করে বলে মনে হচ্ছে না:

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID;

CountryIDকলামটি ফেলে দেওয়ার জন্য আমাকে কী করতে হবে ?

ধন্যবাদ।


2
আপনি কী ত্রুটিটি বিদেশী কী ফেলে দেওয়ার চেষ্টা করছেন?
ddc0660

2
কেবল সচেতন থাকুন যে কেন সেখানে প্রথম স্থান রয়েছে তা না জেনে বিদেশী কী বাধা বিপত্তি হ্রাস করা বিপজ্জনক। আপনি যদি এইটি তৈরি করে থাকেন এবং ভুল করে এটি করেন তবে অন্য উত্তরে প্রদত্ত কোডটি ব্যবহার করুন। যদি তা না হয় তবে আপনি যতক্ষণ না অন্য কোনও কিছু ভেঙে ফেলবেন না তা নিশ্চিত না হওয়া অবধি সীমাবদ্ধতাটি ফেলে রাখবেন না। বাসের নিয়ম প্রয়োগের জন্য সীমাবদ্ধতা তৈরি করা হয়েছে এবং এগুলি নামানোর আগে তাদের আর প্রয়োজন নেই তা নিশ্চিত হওয়া ভাল।
এইচএলজিইএম


এফকে বাদ দেওয়ার জন্য আপনার সিনট্যাক্সে "বিদেশী কী" শব্দের দরকার নেই। এটি এসকিউএল সার্ভার নয়, মাইএসকিউএলের জন্য সিনট্যাক্স। আপনি "প্রতিবন্ধক" শব্দটি দিয়ে এটি প্রতিস্থাপন করতে পারেন।
জন গিলমার

উত্তর:


313

চেষ্টা

alter table company drop constraint Company_CountryID_FK


alter table company drop column CountryID


23

আমি মনে করি এটি আপনার পক্ষে সহায়ক হবে ...

DECLARE @ConstraintName nvarchar(200)
SELECT 
    @ConstraintName = KCU.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU
    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG  
    AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
    AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME
WHERE
    KCU.TABLE_NAME = 'TABLE_NAME' AND
    KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME'
IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop  CONSTRAINT ' + @ConstraintName)

এটি নির্দিষ্ট সারণী এবং কলামের ভিত্তিতে বিদেশী কী বাধা মুছে ফেলবে।


2
ধন্যবাদ সমীর। দুর্দান্ত জেনারালাইজেশন।
kuklei

19

সীমাবদ্ধতার অস্তিত্বের প্রথম চেক তারপর এটিকে ফেলে দিন।

if exists (select 1 from sys.objects where name = 'Company_CountryID_FK' and type='F')
begin
alter table company drop constraint  Company_CountryID_FK
end



1

আপনি টেবিলের উপর রাইট ক্লিক করতে পারেন, পরিবর্তনটি চয়ন করতে পারেন, তারপরে বৈশিষ্ট্যে যান, এটিতে ডান ক্লিক করুন এবং ড্রপ প্রাইমারি কীটি চয়ন করতে পারেন।


1

আপনি কি এফকে বাধা বা কলামটি নিজেই বাদ দেওয়ার চেষ্টা করছেন?

সীমাবদ্ধতা ফেলে দিতে:

alter table company drop constraint Company_CountryID_FK

সীমাবদ্ধতা বাদ দেওয়া পর্যন্ত আপনি কলামটি ছাড়তে পারবেন না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.