2010-09-22 12 views
96

एसक्यूएल सर्वर में, मैं एक मेज पर एक नया स्तंभ है:क्या मैं SQL सर्वर में एक कॉलम कथन में नामित डिफ़ॉल्ट बाधा बना सकता हूं?

ALTER TABLE t_tableName 
    ADD newColumn NOT NULL 

यह विफल रहता है, क्योंकि मैं एक डिफ़ॉल्ट बाधा निर्दिष्ट किए बिना शून्य नहीं निर्दिष्ट करें। तालिका में डिफ़ॉल्ट बाधा नहीं होनी चाहिए।

इसके आसपास पाने के लिए, मैं डिफ़ॉल्ट बाधा के साथ तालिका बना सकता हूं और फिर इसे हटा सकता हूं।

हालांकि, यह निर्दिष्ट करने का कोई तरीका नहीं है कि डिफ़ॉल्ट बाधा को इस कथन के हिस्से के रूप में नामित किया जाना चाहिए, इसलिए इससे छुटकारा पाने का मेरा एकमात्र तरीका एक संग्रहीत प्रक्रिया है जो इसे देखता है sys.default_constraints तालिका।

यह एक ऑपरेशन के लिए थोड़ा गन्दा/वर्बोज़ है जो बहुत कुछ होने की संभावना है। क्या किसी के पास इसके लिए कोई बेहतर समाधान है?

उत्तर

149

यह काम करना चाहिए:

ALTER TABLE t_tableName 
    ADD newColumn VARCHAR(50) 
    CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
+0

निर्माण 2012 में भी। गोरी विवरण: http://msdn.microsoft.com/en-us/library/ms187742.aspx – adam77

1

मैं बिना नल के कॉलम बना सकता हूं, मौजूदा तिथि पर एक अद्यतन चला सकता हूं, फिर कॉलम को नल को बदलने के लिए बदल सकता हूं। मैं इसके प्रदर्शन के प्रभावों के बारे में चिंतित हूं, उदाहरण के लिए यदि यह बहु-मिलियन पंक्ति तालिका पर था, तो यह आदर्श से कम लगता है।

53
ALTER TABLE t_tableName 
    ADD newColumn int NOT NULL 
     CONSTRAINT DF_defaultvalue DEFAULT (1) 
+12

मैं इसे स्वीकार किए गए उत्तर को पसंद करता हूं क्योंकि मैं नलिका बाधा खोने के बारे में चिंता किए बिना डिफ़ॉल्ट बाधा को छोड़ सकता हूं। – EleventhDoctor

+4

@EleventhDoctor यह कोई मतलब नहीं है। नॉट नल बाधा का हिस्सा नहीं है और ड्रॉप स्टेटमेंट केवल बाधा नाम –

+4

@RogerWillcocks का संदर्भ देता है आप सही हैं, लेकिन यह पढ़ने पर स्पष्ट है कि नलिका बाध्यता से अलग नहीं है। – deluxxxe

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