मैं SQL सिंटैक्स का उपयोग करके प्राथमिक कुंजी बाधा को कैसे बदल सकता हूं?


100

मेरे पास एक मेज है जो अपने प्राथमिक कुंजी अवरोध में एक कॉलम को याद कर रही है। SQL सर्वर के माध्यम से इसे संपादित करने के बजाय, मैं इसे हमारे अद्यतन स्क्रिप्ट के भाग के रूप में जोड़ने के लिए इसे स्क्रिप्ट में रखना चाहता हूं।

इसे करने के लिए मैं कौन सी वाक्य रचना का उपयोग कर सकता हूं? क्या मुझे मुख्य बाधा को छोड़ना और फिर से बनाना चाहिए?


5
AFAIK हाँ, आपको पीके बाधा को गिराने और फिर से बनाने की आवश्यकता है। मुझे पहले से मौजूद PK / FK बाधा के लिए एक कॉलम जोड़ने के लिए कोई भी कमांड याद नहीं है।
सेरामे

जवाबों:


149

हाँ। एकमात्र तरीका यह होगा कि ऑल्टर टेबल के साथ बाधा को गिरा दिया जाए और फिर से बनाया जाए।

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
यदि आपको प्राथमिक कुंजी बाधा नाम नहीं पता है, तो इसे देखने के लिए यहां क्वेरी का उपयोग करें (या ऊपर देखें और सभी को एक साथ छोड़ दें)। http://stackoverflow.com/a/13948609/945875
जस्टिन

अगर यह स्पष्ट नहीं था, या किसी और ने एक ही गलती की है, तो बाधाओं का नाम उद्धरणों में नहीं जा सकता alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187है
मस्लो

1
आप में से उन लोगों के लिए, जो बाधा नाम नहीं जानते: ALTER TABLE dbtable ड्रॉप प्राथमिक कुंजी, जोड़ें प्राथमिक कुंजी ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTपरिवर्तित नहीं किया जा सकता है, आप केवल इसे छोड़ सकते हैं और फिर से बना सकते हैं। बड़े डेटासेट के लिए यह लंबे समय तक चलने का कारण बन सकता है और इस प्रकार - टेबल की अनुपलब्धता।


3

प्रदर्शन के लिहाज से इस दौरान गैर-संकुलित सूचकांक रखने का कोई मतलब नहीं है क्योंकि वे ड्रॉप और बनाने पर फिर से अपडेट हो जाएंगे। यदि यह एक बड़ा डेटा सेट है, तो आपको तालिका का नाम बदलने पर विचार करना चाहिए (यदि संभव हो तो, इस पर कोई भी सुरक्षा सेटिंग्स?), सही कुंजियों के साथ एक खाली तालिका फिर से बनाने से सभी डेटा को माइग्रेट किया जाता है। आपको यह सुनिश्चित करना होगा कि आपके पास इसके लिए पर्याप्त जगह हो।


3

मेरे मामले में, मैं प्राथमिक कुंजी (कॉलम 4) में एक कॉलम जोड़ना चाहता हूं। मैंने इस स्क्रिप्ट का उपयोग स्तंभ 4 को जोड़ने के लिए किया था

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

आप sp_rename का उपयोग करके बाधा वस्तुओं का नाम बदल सकते हैं (जैसा कि इस उत्तर में वर्णित है )

उदाहरण के लिए:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

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