2012-01-06 9 views
65

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

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

+3

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

उत्तर

96

हां। एकमात्र तरीका एक आल्टर टेबल के साथ बाधा को छोड़ना होगा और फिर इसे फिर से बनाना होगा।

ALTER TABLE <Table_Name> 
DROP CONSTRAINT <constraint_name> 

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

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

+0

अगर यह स्पष्ट नहीं था, या कोई और एक ही गलती करता है, तो बाधा नाम कर सकते हैं कोट्स में नहीं जाना 'तालिका बदलना PatientsInfo ड्रॉप बाधा PK__Patients__1CBB51380A338187' यहां काम कर रहा है – Maslow

17

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

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

आप नाम बदल सकते हैं बाधा sp_rename (this answer में वर्णित है)

उदाहरण के लिए

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

+2

प्रश्न यह था कि बाधा को कैसे बदला जाए, यानी नाम बदलें, न कि नाम बदलें। –

1

प्रदर्शन बुद्धिमान वहाँ गैर क्लस्टर अनुक्रमित रखने के लिए कोई मतलब नहीं है के रूप में वे फिर से मिल जाएगा:

संबंधित मुद्दे