सवाल SQL सर्वर में किसी मौजूदा तालिका में डिफ़ॉल्ट मान वाले कॉलम जोड़ें


डिफ़ॉल्ट मान वाले कॉलम को मौजूदा तालिका में जोड़ा जा सकता है एसक्यूएल सर्वर 2000 / एसक्यूएल सर्वर 2005?


2297
2017-09-18 12:30


मूल


और यह भी एक w3schools.com/sql/sql_alter.asp - Academy of Programmer


जवाब:


वाक्य - विन्यास:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

उदाहरण:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

टिप्पणियाँ:

वैकल्पिक बाधा नाम:
अगर आप बाहर निकलते हैं CONSTRAINT D_SomeTable_SomeCol तो SQL सर्वर स्वत: उत्पन्न होगा
एक अजीब नाम के साथ एक डिफ़ॉल्ट-Contraint जैसे: DF__SomeTa__SomeC__4FB7FEF6

वैकल्पिक मूल्य-मूल्य विवरण:
WITH VALUES केवल तभी जरूरी है जब आपका कॉलम नामुमकिन हो
और आप मौजूदा रिकॉर्ड्स के लिए उपयोग किए गए डिफ़ॉल्ट मान चाहते हैं।
यदि आपका कॉलम है NOT NULL, तो यह स्वचालित रूप से डिफ़ॉल्ट मान का उपयोग करेगा
सभी मौजूदा रिकॉर्ड्स के लिए, चाहे आप निर्दिष्ट करें WITH VALUES या नहीं।

कैसे डिस्प्ले डिफ़ॉल्ट-बाधा के साथ काम करते हैं:
यदि आप एक रिकॉर्ड डालते हैं SomeTable और करो नहीं उल्लिखित करना SomeColमान, तो यह डिफ़ॉल्ट होगा 0
यदि आप एक रिकॉर्ड डालते हैं तथा उल्लिखित करना SomeColके रूप में मूल्य है NULL (और आपका कॉलम नल की अनुमति देता है)
तो डिफ़ॉल्ट-प्रतिबंध होगा नहीं इस्तेमाल किया जाना चाहिए और NULL मूल्य के रूप में डाला जाएगा।

नोट्स नीचे हर किसी की महान प्रतिक्रिया पर आधारित थे।
उन्हें विशेष धन्यवाद:
@Yatrix, @WalterStabosz, @YahooSerious, और @StackMan उनकी टिप्पणियों के लिए।


2920
2017-09-18 12:34



ध्यान रखें कि यदि कॉलम शून्य है, तो मौजूदा पंक्तियों के लिए शून्य का उपयोग किया जाएगा। - Richard Collette
@Thecrocodilehunter निरर्थक कॉलम का अर्थ है कि आप स्तंभ मान के लिए शून्य डाल सकते हैं। यदि यह एक शून्य कॉलम नहीं है, तो आपको उस डेटा प्रकार का कुछ मूल्य डालना होगा। इसलिए, मौजूदा रिकॉर्ड्स के लिए, नल उन्हें और नए रिकॉर्ड में डाला जाएगा, अन्यथा निर्दिष्ट किए जाने तक आपका डिफ़ॉल्ट मान डाला जाएगा। सही बात? - Yatrix
मुझे यह जवाब डबगर की तुलना में थोड़ा बेहतर पसंद है क्योंकि यह स्पष्ट रूप से डिफ़ॉल्ट बाधा का नाम देता है। एक डिफ़ॉल्ट बाधा अभी भी dbugger के वाक्यविन्यास का उपयोग करके बनाई गई है, सिवाय इसके कि उसका नाम स्वत: जेनरेट किया गया है। ड्रॉप-क्रिएट स्क्रिप्ट लिखते समय सटीक नाम जानना आसान है। - Walter Stabosz
@ वर्टिगो अगर कॉलम है तो यह केवल सच है NOT NULL। कृपया इसे आजमाएं: create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah; आपको कॉलम के लिए 2 न्यूल मान दिखाई देंगे b। - ErikE
उपयोग WITH VALUES मौजूदा शून्य पंक्तियों को अद्यतन करने के लिए। देख MSDN: "यदि जोड़ा कॉलम शून्य मानों की अनुमति देता है और WITH VALUES निर्दिष्ट है, डिफ़ॉल्ट मान को नए कॉलम में संग्रहीत किया जाता है, जो मौजूदा पंक्तियों में जोड़ा जाता है। " - Yahoo Serious


ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

शामिल करना चूक कॉलम भरता है मौजूदा डिफ़ॉल्ट मान के साथ पंक्तियों, इसलिए नल की बाधा का उल्लंघन नहीं किया जाता है।


869
2017-09-18 12:31



उस उत्तर में समस्या यह है कि डिफ़ॉल्ट मान केवल नए रिकॉर्ड के लिए मान्य है। मौजूदा रिकॉर्ड में अभी भी कुल मूल्य होगा। - Roee Gavirel
आप पाएंगे कि यह मामला नहीं है। अन्यथा बाधा का उल्लंघन किया जाएगा। - dbugger
मौजूदा पंक्तियों में कॉलम डिफ़ॉल्ट मान से भरे हुए हैं। थोड़ा अनुभवजन्य परीक्षण यह साबित होगा। - dbugger
बस स्पष्ट करने के लिए - यदि आदेश से "नहीं पूर्ण" छोड़ा गया है, तो मौजूदा पंक्तियों के लिए मूल्य अपडेट नहीं किया जाएगा और न्यूल रहेगा। यदि कमांड में "नॉट न्यूल" शामिल है, तो मौजूदा पंक्तियों के मान को डिफ़ॉल्ट से मिलान करने के लिए अपडेट किया जाएगा। - Stack Man
एकाधिक कॉलम के लिए ऑल्टर टेबल तालिका_1 कॉल करें int को पूर्ण डिफॉल्ट (1), col_2 int NULL - aads


एक जोड़ते समय शून्य कॉलम, WITH VALUES यह सुनिश्चित करेगा कि मौजूदा पंक्तियों पर विशिष्ट DEFAULT मान लागू किया गया है:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

196
2018-04-12 17:40



यह एक महत्वपूर्ण बिंदु है। एक के साथ एक कॉलम मानना ​​आसान है DEFAULT बाधा हमेशा एक मूल्य होगा - हालांकि, शून्य नहीं है, भले ही NOT NULL निर्दिष्ट नहीं है - Bill Brinkley
@tkocmathla ओह, मैं इसके बारे में बात नहीं कर रहा था BIT डेटाटाइप, मैं इस विशेष के बारे में बात कर रहा था BIT  स्तंभ। उत्तर को देखें, कॉलम के रूप में घोषित किया गया है NOT NULL। - rsenna


ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

115
2017-09-18 12:39



यदि तालिका में पहले से ही सामग्री है तो यह काम नहीं करेगा क्योंकि नया "शून्य नहीं है" कॉलम डिफ़ॉल्ट मान बाधा से पहले बनाया गया है - WDuffy
मेरा +1 पहले के बाद स्निपेट के लिए चला जाता है GO जो मौजूदा कॉलम में बाधा डालता है। - Barry Guvenkaya


ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

104
2017-08-05 03:28



यह शून्य जोड़ें! पहले शून्य नहीं होना चाहिए - baaroz
@baaroz, यह न्यूल के साथ काम करता है: वैकल्पिक तालिका में MYNABLELE MYNEWCOLUMN VARCHAR (200) न जोड़ें पूर्ण परिभाषा 'SNUGGLES' - stom


सावधान रहें जब आप जो कॉलम जोड़ रहे हैं वह एक है NOT NULL बाधा, अभी तक एक नहीं है DEFAULT बाधा (मूल्य)। ALTER TABLE यदि उस तालिका में कोई पंक्ति है तो उस स्थिति में कथन विफल हो जाएगा। समाधान या तो निकालना है NOT NULL नए कॉलम से बाधा, या एक प्रदान करते हैं DEFAULT इसके लिए बाधा।


84
2017-09-24 16:03



कोई एसक्यूएल नमूना इसके बारे में ? - Kiquenet


केवल दो पंक्तियों के साथ सबसे बुनियादी संस्करण

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50





उपयोग:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

64
2017-12-09 17:45





यदि आप कई कॉलम जोड़ना चाहते हैं तो आप इसे उदाहरण के लिए कर सकते हैं:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO

55
2017-10-14 18:38





उपयोग:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

संदर्भ: वैकल्पिक तालिका (ट्रांजैक्ट-एसक्यूएल) (MSDN)


44
2017-12-27 02:44