मुझे प्रारंभिक मान के साथ एक एमएस एसक्यूएल 2005 डेटाबेस में एक नया कॉलम जोड़ने की जरूरत है। हालांकि, मैं इस कॉलम पर स्वचालित रूप से डिफ़ॉल्ट बाधा नहीं बनाना चाहता हूं। उस बिंदु पर जब मैं कॉलम जोड़ता हूं तो डिफ़ॉल्ट/प्रारंभिक मान सही होता है, लेकिन यह समय के साथ बदल सकता है। इसलिए, तालिका में भविष्य तक पहुंच को डिफ़ॉल्ट को स्वीकार करने के बजाय एक मान निर्दिष्ट करना होगा।प्रारंभिक (लेकिन डिफ़ॉल्ट नहीं) मान के साथ एक नया कॉलम जोड़ने का सबसे अच्छा तरीका?
सबसे अच्छा मैं के साथ आ सकता है:
ALTER TABLE tbl ADD col INTEGER NULL
UPDATE tbl SET col = 1
ALTER TABLE tbl ALTER COLUMN col INTEGER NOT NULL
यह बड़ा सा टेबल (100,000 1,000,000 रिकॉर्ड) के लिए एक सा अक्षम लगता है।
मैंने डिफ़ॉल्ट रूप से कॉलम जोड़ने और फिर डिफ़ॉल्ट बाधा को हटाने के साथ प्रयोग किया है। हालांकि, मुझे नहीं पता कि डिफ़ॉल्ट बाधा का नाम क्या है और सिसोबजेक्ट तक नहीं पहुंच पाएगा और डेटाबेस विशिष्ट ज्ञान में डालेगा।
कृपया, एक बेहतर तरीका होना चाहिए।
+1। --- @ एलेक्स: मुझे यकीन नहीं है कि कोई एक ट्रैशक्शन के भीतर डीडीएल कर सकता है। --- @ एड्रियन: क्या आप वास्तव में अक्षम होने की परवाह करते हैं? आप इसे हर दिन नहीं कर रहे हैं, है ना? आम तौर पर मैं स्पष्टता के लिए वर्णन करने के तरीके का उपयोग करता हूं। – van
@van, मैं इस संबंध में SqlServer'05 की सीमाओं के 100% निश्चित नहीं हूं - PostgreSQL आपको लेन-देन तालिका को बदलने देता है (कम से कम लेनदेन के स्पष्ट BEGIN और COMMIT के साथ)। यह जांचने के लिए कि क्या एमएस भी करता है, SELECT @@ TRANCOUNT आपको बताएगा (मुझे यह स्पष्ट रूप से दस्तावेज़ों में वर्तनी नहीं मिल सकती है)। –
@van & @Alex एमएस एसक्यूएल सर्वर लेनदेन के भीतर डीडीएल करता है। –