मैं SQL Server 2000 / SQL सर्वर 2005 में मौजूदा तालिका में डिफ़ॉल्ट मान के साथ एक स्तंभ कैसे जोड़ सकता हूं ?
मैं SQL Server 2000 / SQL सर्वर 2005 में मौजूदा तालिका में डिफ़ॉल्ट मान के साथ एक स्तंभ कैसे जोड़ सकता हूं ?
जवाबों:
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 सर्वर
एक डिफ़ॉल्ट नाम के साथ एक डिफ़ॉल्ट-कंट्रास्ट को स्वचालित करेगा :DF__SomeTa__SomeC__4FB7FEF6
वैकल्पिक साथ-मान कथन: केवल जरूरत है जब आपके कॉलम Nullable है
और आप डिफ़ॉल्ट मान मौजूदा रिकॉर्ड के लिए इस्तेमाल करना चाहते हैं।
यदि आपका कॉलम है , तो यह स्वचालित रूप से
सभी मौजूदा रिकॉर्ड के लिए डिफ़ॉल्ट मान का उपयोग करेगा , चाहे आप निर्दिष्ट करें या नहीं।WITH VALUES
NOT NULL
WITH VALUES
डिफाल्ट-कॉन्सट्रेंट के साथ इंसर कैसे काम करता है:
यदि आप एक रिकॉर्ड डालते हैं SomeTable
और यह निर्दिष्ट नहीं करता है SomeCol
, तो यह डिफॉल्ट हो जाएगा 0
।
यदि आप एक रिकार्ड सम्मिलित करें और निर्दिष्ट SomeCol
के रूप में के मूल्य NULL
(और अपने स्तंभ nulls की अनुमति देता है),
तो डिफ़ॉल्ट-बाधा जाएगा नहीं इस्तेमाल किया जा और NULL
मूल्य के रूप में सम्मिलित किया जाएगा।
नोट्स नीचे सभी की शानदार प्रतिक्रिया पर आधारित थे।
इसके लिए विशेष धन्यवाद:
@Yatrix, @alterStabosz, @YahooSouble, और @StackMan उनकी टिप्पणियों के लिए।
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 NULL मान दिखाई देंगे b
।
WITH VALUES
मौजूदा अशक्त पंक्तियों को अद्यतन करने के लिए उपयोग करें । MSDN देखें : "यदि जोड़ा स्तंभ अशक्त मानों WITH VALUES
को निर्दिष्ट करता है और निर्दिष्ट किया जाता है, तो डिफ़ॉल्ट मान नए कॉलम में संग्रहीत है, मौजूदा पंक्तियों में जोड़ा गया है।"
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
DEFAULT का समावेश कॉलम को डिफ़ॉल्ट मान के साथ मौजूदा पंक्तियों में भरता है , इसलिए नॉट नाल बाधा का उल्लंघन नहीं किया जाता है।
एक अशक्त स्तंभ जोड़ने पर , WITH VALUES
यह सुनिश्चित करेगा कि विशिष्ट DEFAULT मान मौजूदा पंक्तियों पर लागू होता है:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
DEFAULT
बाधा के साथ एक स्तंभ हमेशा एक मूल्य होगा - वह यह है कि NULL नहीं है, भले ही NOT NULL
वह निर्दिष्ट न हो।
BIT
डेटाटाइप के बारे में बात नहीं कर रहा था, मैं इस विशेष BIT
कॉलम के बारे में बात कर रहा था । उत्तर को देखो, कॉलम के रूप में घोषित किया गया है NOT NULL
।
जब आप जो कॉलम जोड़ रहे हैं NOT NULL
उससे सावधान रहें , फिर भी DEFAULT
बाधा (मान) नहीं है। ALTER TABLE
बयान है कि मामले में विफल हो जाएगा यदि तालिका यह किसी भी पंक्तियां हैं। समाधान यह है कि या तो NOT NULL
नए कॉलम से बाधा को हटा दें , या इसके लिए एक DEFAULT
बाधा प्रदान करें ।
यदि आप कई कॉलम जोड़ना चाहते हैं तो आप इसे इस तरह से कर सकते हैं:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
उपयोग:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
संदर्भ: वैकल्पिक तालिका (लेनदेन-एसक्यूएल) (MSDN)
डिफ़ॉल्ट मान के साथ मौजूदा डेटाबेस तालिका में एक स्तंभ जोड़ने के लिए, हम उपयोग कर सकते हैं:
ALTER TABLE [dbo.table_name]
ADD [Column_Name] BIT NOT NULL
Default ( 0 )
डिफ़ॉल्ट डेटाबेस के साथ मौजूदा डेटाबेस तालिका में कॉलम जोड़ने का एक और तरीका है।
डिफ़ॉल्ट मान के साथ एक स्तंभ जोड़ने के लिए एक बहुत अधिक पूरी तरह से SQL स्क्रिप्ट नीचे है अगर जाँच करने से पहले कि स्तंभ मौजूद है, इसे जोड़ने से पहले भी बाधा की जाँच करें और इसे छोड़ देना अगर एक है। इस लिपि में बाधा का नाम भी है, इसलिए हमारे पास एक अच्छा नामकरण सम्मेलन हो सकता है (मुझे DF_ पसंद है) और यदि SQL हमें एक नाम के साथ एक बाधा नहीं देगा, जिसमें एक यादृच्छिक रूप से उत्पन्न संख्या है; इसलिए यह भी अच्छा है कि बाधा को भी नाम दिया जा सके।
-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
IF EXISTS ( SELECT 1
FROM sys.default_constraints
WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
)
BEGIN
------ DROP Contraint
ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
END
-- ----- DROP Column -----------------------------------------------------------------
ALTER TABLE [dbo].table_Emplyee
DROP COLUMN Column_EmployeeName
PRINT 'Column Column_EmployeeName in images table was dropped'
END
--------------------------------------------------------------------------
-- ADD COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
----- ADD Column & Contraint
ALTER TABLE dbo.table_Emplyee
ADD Column_EmployeeName BIT NOT NULL
CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] DEFAULT (0)
PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
END
GO
डिफ़ॉल्ट डेटाबेस के साथ मौजूदा डेटाबेस तालिका में कॉलम जोड़ने के ये दो तरीके हैं।
आप निम्न तरीके से T-SQL के साथ काम कर सकते हैं।
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
साथ ही साथ आप SQL सर्वर प्रबंधन स्टूडियो का भी उपयोग कर सकते हैं डिज़ाइन मेनू में राइट क्लिक टेबल, डिफ़ॉल्ट मान को टेबल पर सेट करके।
और इसके अलावा, यदि आप डेटाबेस में सभी तालिकाओं में एक ही कॉलम (यदि यह मौजूद नहीं है) जोड़ना चाहते हैं, तो उपयोग करें:
USE AdventureWorks;
EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
SQL Server 2008-R2 में, मैं डिज़ाइन मोड में जाता हूं - एक परीक्षण डेटाबेस में - और डिजाइनर का उपयोग करके अपने दो कॉलम जोड़कर GUI के साथ सेटिंग की, और फिर कुख्यात Right-Clickविकल्प " जनरेट चेंज स्क्रिप्ट " उत्पन्न करता है " !
बैंग पॉप एक छोटी सी खिड़की के साथ, आपने यह अनुमान लगाया, ठीक से स्वरूपित गारंटी-टू-वर्क परिवर्तन स्क्रिप्ट। आसान बटन मारो।
वैकल्पिक रूप से, आप स्पष्ट रूप से बाधा का नाम लिए बिना एक डिफ़ॉल्ट जोड़ सकते हैं:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
यदि इस बाधा को बनाते समय आपके पास मौजूदा डिफ़ॉल्ट बाधाओं के साथ कोई समस्या है, तो उन्हें निम्न द्वारा हटाया जा सकता है:
alter table [schema].[tablename] drop constraint [constraintname]
यह SSMS GUI में भी किया जा सकता है। मैं नीचे एक डिफ़ॉल्ट दिनांक दिखाता हूं लेकिन डिफ़ॉल्ट मान जो भी हो, निश्चित रूप से हो सकता है।
(getdate())
या abc
या 0
या आप जो भी मान में चाहते डिफ़ॉल्ट मान या बाध्यकारी रूप में नीचे बताए अनुसार क्षेत्र:ALTER TABLE ADD ColumnName {Column_Type} Constraint
MSDN के लेख ALTER TABLE (Transact-SQL) में सभी परिवर्तन तालिका सिंटैक्स है।
उदाहरण:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
इसके बहुत सारे उत्तर हैं, लेकिन मुझे इस विस्तारित विधि को जोड़ने की आवश्यकता है। यह बहुत लंबा लगता है, लेकिन अगर आप एक सक्रिय डेटाबेस में लाखों पंक्तियों के साथ एक तालिका में नॉट NULL फ़ील्ड जोड़ रहे हैं तो यह बहुत उपयोगी है।
ALTER TABLE {schemaName}.{tableName}
ADD {columnName} {datatype} NULL
CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
ALTER COLUMN {columnName} {datatype} NOT NULL
यह क्या करेगा कॉलम को एक अशक्त फ़ील्ड के रूप में जोड़ा जाएगा और डिफ़ॉल्ट मान के साथ, सभी फ़ील्ड को डिफ़ॉल्ट मान में अपडेट करें (या आप अधिक सार्थक मान असाइन कर सकते हैं), और अंत में यह कॉलम को नॉट नॉट में बदल देगा।
इसका कारण यह है कि यदि आप एक बड़े पैमाने पर तालिका को अपडेट करते हैं और एक नया नहीं शून्य फ़ील्ड जोड़ते हैं, तो उसे हर एक पंक्ति में लिखना होगा और इसके बाद संपूर्ण तालिका को लॉक कर दिया जाएगा क्योंकि यह कॉलम जोड़ता है और फिर सभी मान लिखता है।
यह विधि अशक्त स्तंभ को जोड़ेगी जो बहुत तेजी से अपने आप काम करता है, फिर शून्य स्थिति को सेट करने से पहले डेटा को भरता है।
मैंने पाया है कि एक बयान में पूरी बात करने से हमारी एक और सक्रिय तालिका 4-8 मिनट के लिए बंद हो जाएगी और काफी बार मैंने इस प्रक्रिया को मार दिया है। यह विधि प्रत्येक भाग में आमतौर पर केवल कुछ सेकंड लगते हैं और न्यूनतम लॉकिंग का कारण बनते हैं।
इसके अतिरिक्त, यदि आपके पास अरबों पंक्तियों के क्षेत्र में एक तालिका है तो यह अद्यतन को बैचने लायक हो सकता है:
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
इसे इस्तेमाल करे
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
SQL सर्वर + ऑल्टर टेबल + कॉलम जोड़ें + डिफ़ॉल्ट मान अद्वितीय
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
IF NOT EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
NOT EXISTS
तालिका को बदलने का प्रयास करने से पहले चेक पसंद है । बहुत अच्छा उपाय है। यह कैसे काम करता है पर कुछ अतिरिक्त टिप्पणी इसे और भी उपयोगी बना देगी।
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
तालिका में एक नया कॉलम जोड़ें:
ALTER TABLE [table]
ADD Column1 Datatype
उदाहरण के लिए,
ALTER TABLE [test]
ADD ID Int
यदि उपयोगकर्ता इसे स्वतः बढ़ाना चाहता है तो:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
यह SQL सर्वर के लिए है:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
उदाहरण:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
यदि आप बाधाओं को जोड़ना चाहते हैं तो:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
यह नीचे दिए गए कोड द्वारा किया जा सकता है।
CREATE TABLE TestTable
(FirstCol INT NOT NULL)
GO
------------------------------
-- Option 1
------------------------------
-- Adding New Column
ALTER TABLE TestTable
ADD SecondCol INT
GO
-- Updating it with Default
UPDATE TestTable
SET SecondCol = 0
GO
-- Alter
ALTER TABLE TestTable
ALTER COLUMN SecondCol INT NOT NULL
GO
नीचे दिए गए प्रश्न के साथ प्रयास करें:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
यह तालिका में एक नया कॉलम जोड़ेगा।
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
इस क्वेरी से आप डिफ़ॉल्ट मान 0 के साथ डेटाटाइप पूर्णांक का एक स्तंभ जोड़ सकते हैं।
खैर, अब मेरे पास अपने पिछले उत्तर के लिए कुछ संशोधन है। मैंने देखा है कि कोई भी उत्तर नहीं दिया गया है IF NOT EXISTS
। इसलिए मैं इसका एक नया समाधान प्रदान करने जा रहा हूं क्योंकि मैंने तालिका को बदलने में कुछ समस्याओं का सामना किया है।
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO
यहां TaskSheet
विशेष तालिका का नाम है और IsBilledToClient
नया कॉलम है जिसे आप डालने जा रहे हैं और 1
डिफ़ॉल्ट मान। नए कॉलम में इसका मतलब है कि मौजूदा पंक्तियों का मूल्य क्या होगा, इसलिए कोई भी स्वचालित रूप से वहां सेट हो जाएगा। हालाँकि, आप स्तंभ प्रकार के सम्मान के साथ अपनी इच्छानुसार बदल सकते हैं जैसे मैंने उपयोग किया हैBIT
, इसलिए मैंने डिफ़ॉल्ट मान 1 में रखा है।
मैं उपरोक्त प्रणाली का सुझाव देता हूं, क्योंकि मैंने एक समस्या का सामना किया है। तो समस्या क्या है? समस्या यह है, यदि IsBilledToClient
स्तंभ तालिका तालिका में मौजूद है, तो यदि आप नीचे दिए गए कोड के केवल हिस्से को निष्पादित करते हैं, तो आपको SQL सर्वर क्वेरी बिल्डर में एक त्रुटि दिखाई देगी। लेकिन अगर यह मौजूद नहीं है, तो पहली बार निष्पादित करते समय कोई त्रुटि नहीं होगी।
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]