मैं SQL सर्वर में एक विदेशी कुंजी कैसे छोड़ूं?


201

मैंने एक विदेशी कुंजी (SQL सर्वर में) बनाई है:

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;

और मुझे यह त्रुटि मिली:

Msg 5074, स्तर 16, राज्य 4, पंक्ति 2
ऑब्जेक्ट 'Company_CountryID_FK' कॉलम 'CountryID' पर निर्भर है।
एमएसजी 4922, लेवल 16, स्टेट 9, लाइन 2
ऑल्टर टैबल ड्रॉप कलर कंट्रीड फेल हो गया क्योंकि एक या एक से अधिक ऑब्जेक्ट इस कॉलम तक पहुंचते हैं

मैंने यह कोशिश की है, फिर भी यह काम नहीं करता है:

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

CountryIDस्तंभ को गिराने के लिए मुझे क्या करने की आवश्यकता है ?

धन्यवाद।


2
विदेशी कुंजी को छोड़ने के लिए आपको क्या त्रुटि मिलती है?
ddc0660

2
बस इस बात से अवगत रहें कि एक विदेशी कुंजी बाधा को यह जानना खतरनाक है कि यह पहले स्थान पर क्यों है? यदि आपने अभी इसे बनाया है और इसे गलती से किया है, तो अन्य उत्तरों में दिए गए कोड का उपयोग करें। यदि नहीं, तो जब तक आप यह सुनिश्चित नहीं करते हैं कि आप ऐसा करने से कुछ और नहीं तोड़ेंगे, तब तक बाधा न छोड़ें। व्यस्तता नियमों को लागू करने के लिए बाधाओं का निर्माण किया जाता है और यह निश्चित है कि उन्हें छोड़ने से पहले उनकी आवश्यकता नहीं है।
HLGEM


FK को छोड़ने के लिए आपके सिंटैक्स को "विदेशी कुंजी" शब्दों की आवश्यकता नहीं है। यह SQL सर्वर नहीं MySQL के लिए सिंटैक्स है। आप इसे "बाधा" शब्द से बदल सकते हैं।
जॉन गिलमर

जवाबों:


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
धन्यवाद समीर। महान सामान्यीकरण।
कुकलेई

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

क्या आप FK बाधा या स्तंभ को स्वयं छोड़ने का प्रयास कर रहे हैं?

बाधा छोड़ने के लिए:

alter table company drop constraint Company_CountryID_FK

आप कॉलम को तब तक नहीं छोड़ पाएंगे जब तक आप बाधा को नहीं छोड़ देते।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.