Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर को समझना ALTER TABLE ADD COLUMN Statement

यह आलेख SQL सर्वर ALTER TABLE ADD COLUMN कथन का वर्णन करता है। इस कथन का उद्देश्य मौजूदा तालिका में एक नया कॉलम जोड़ना है। साथ ही, लेख निम्नलिखित उपयोग के मामलों को स्पष्ट करेगा:

  1. एकाधिक कॉलम जोड़ें।
  2. एक नया प्राथमिक कुंजी कॉलम जोड़ें।
  3. एक नया विदेशी कुंजी कॉलम जोड़ें।
  4. ऐसे नए कॉलम जोड़ें जिनमें परिकलित कॉलम हों।
  5. एक नया कॉलम जोड़ें जिसमें CHECK और UNIQUE बाधाएं हों।

SQL ALTER TABLE ADD COLUMN स्टेटमेंट की सिंटैक्स विशिष्टता

जैसा कि हम कथन को अच्छी तरह से तलाशने जा रहे हैं, आइए वाक्य रचना को समझने के साथ शुरू करें:

Alter table [table_name] add column [column_name] [data_type][constraint]

निम्नलिखित पहलुओं पर ध्यान दें:

  1. आपको तालिका का नाम निर्दिष्ट करने की आवश्यकता है जहां आप बाद में . कॉलम जोड़ना चाहते हैं तालिका बदलें
  2. कॉलम या कॉलम का नाम जोड़ने के बाद . होना चाहिए . एकाधिक स्तंभों के लिए, उनके नाम अल्पविराम से अलग करें।
  3. स्तंभ नाम के बाद स्तंभ डेटा प्रकार निर्दिष्ट करें
  4. यदि आप कोई बाधा, प्राथमिक कुंजी, या कोई विदेशी कुंजी जोड़ रहे हैं , इसे डेटा प्रकार के बाद specify निर्दिष्ट करें ।

प्रदर्शन उद्देश्यों के लिए, मैंने CodingSight . नाम का एक डेटाबेस बनाया है . वहां, मैंने tbldepartment . नाम की तीन टेबल बनाई हैं , भ्रष्टाचारी, और tblCity, और उन तालिकाओं में डमी डेटा डाला।

निम्न स्क्रिप्ट एक डेटाबेस और टेबल बनाती है:

USE codingsight
GO
CREATE TABLE tbldepartment(departmentID INT IDENTITY(1,1), departmentname VARCHAR(50), 
CONSTRAINT PK_departmentID  PRIMARY KEY  (departmentID))
GO
CREATE TABLE tblemployee(employeeID INT IDENTITY(1,1), name VARCHAR(50), Address VARCHAR(max), PhoneNumber VARCHAR(10)
CONSTRAINT PK_employeeID  PRIMARY KEY  (employeeID))
GO
CREATE TABLE tblCity( Name VARCHAR(50), Country VARCHAR(100))
GO

नीचे दी गई स्क्रिप्ट डमी डेटा को तालिका में सम्मिलित करती है:

INSERT INTO tbldepartment (departmentname) VALUES ('IT'),('Devlopment Team'),('Human Resource'),('Qualiy Assurance')
GO
INSERT INTO tblemployee (name, address, PhoneNumber) VALUES 
('Nisarg Upadhyay','AB14, Akshardham Flats, Mehsana', 1234567890),
('Nirali Upadhyay','AB05, Suyojan Flats, Surat', 1234567890),
('Dixit Upadhyay','B14, Suyash Flats, Vadodara', 1234567890),
('Bharti Upadhyay','C14, Suramya Flats, Ahmedabad', 1234567890),
('Sawan panchal','P18, Kirti Flats, Ahmedabad', 1234567890),
('Raghav Dave','A14, Suramya Flats, Ahmedabad', 1234567890)
GO
INSERT INTO tblCity (name, country)VALUES 
('Ahmedabad','India'),
('Surat','India'),
('Vadodara','India'),
('Gandhinagar','India')
Go

अब, उपयोग के मामलों पर आगे बढ़ते हैं।

एक टेबल में कई कॉलम जोड़ें

हमारे उदाहरण में, हम राज्य . जोड़ना चाहते हैं और पिनकोड tbleCity . पर कॉलम टेबल। राज्य . का डेटा प्रकार स्तंभ VARCHAR है, और स्तंभ की लंबाई 150 है। पिनकोड का डेटा प्रकार कॉलम INTEGER है। कॉलम जोड़ने के लिए, निम्न क्वेरी चलाएँ:

ALTER TABLE tblCity ADD State VARCHAR(150), Pincode INT

अब, tblCity . की कॉलम सूची देखने के लिए क्वेरी चलाएँ तालिका:

USE CodingSight
go
SELECT c.TABLE_SCHEMA,c.TABLE_NAME,c.COLUMN_NAME,c.DATA_TYPE,c.CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS c WHERE C.TABLE_NAME='tblCity'

क्वेरी आउटपुट:

जैसा कि आप देख सकते हैं, राज्य और पिनकोड कॉलम जोड़ दिए गए हैं।

प्राथमिक कुंजी कॉलम को तालिका में जोड़ें

आइए प्राथमिक कुंजी कॉलम को tblCity . में जोड़ें टेबल। व्यावसायिक आवश्यकताओं के अनुसार, हमें शहर की पहचान करने के लिए एक वर्ण और चार अंकों की संख्या के संयोजन के साथ एक कॉलम जोड़ना होगा।

हम City_Code . नाम का एक नया कॉलम जोड़ रहे हैं tblCity . को टेबल। City_Code . का डेटाटाइप वर्चर है, और लंबाई पांच है। कॉलम जोड़ने के लिए निम्न क्वेरी चलाएँ:

ALTER TABLE tblCity ADD City_Code VARCHAR(5) PRIMARY KEY  CLUSTERED

आउटपुट:

Msg 4901, Level 16, State 1, Line 29
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column. 
Alternatively, if none of the previous conditions are satisfied the table must be empty to allow the addition of this column. 
Column 'City_Code' cannot be added to non-empty table 'tblCity' because it does not satisfy these conditions.

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

चरण:1

tblCity_Temp . नाम की एक नई खाली तालिका बनाएं मौजूदा tblCity . की परिभाषा का उपयोग करते हुए टेबल। नई तालिका में एक प्राथमिक कुंजी स्तंभ है।

निर्माण स्क्रिप्ट इस प्रकार है:

CREATE TABLE tblCity_Temp( City_code VARCHAR(5) CONSTRAINT PK_City_Code PRIMARY KEY CLUSTERED,
Name VARCHAR(50), Country VARCHAR(100))
GO

चरण:2

डेटा को tblCity_Temp . में डालें tblCity . से तालिका तालिका:

INSERT INTO tblCity_Temp (City_code,name, country)VALUES 
('C0001','Ahmedabad','India'),
('C0002','Surat','India'),
('C0003','Vadodara','India'),
('C0004','Gandhinagar','India')
GO

चरण:3

नीचे दिखाए अनुसार तालिकाओं का नाम बदलें:

  1. पुराना नाम: tblCity - नया नाम: tblCity_Old.
  2. पुराना नाम: tblCity_Temp - नया नाम: tblCity

तालिका-नामकरण क्वेरी पर ध्यान दें:

USE codingsight 
go 

EXEC Sp_rename 
  'tblCity', 
  'tblCity_Old' 
go 

EXEC Sp_rename 
  'tblCity_Temp', 
  'tblCity' 
go

अब, नई जोड़ी गई प्राथमिक कुंजी देखने के लिए निम्न क्वेरी चलाएँ:

USE codingsight 

go 

SELECT Schema_name(tbl.schema_id)    AS [schema_name], 
       primary_key.[name]            AS pk_name, 
       index_columns.index_column_id AS column_id, 
       TABLE_coumns.[name]           AS column_name, 
       tbl.[name]                    AS table_name 
FROM   sys.tables tbl 
       INNER JOIN sys.indexes primary_key 
               ON tbl.object_id = primary_key.object_id 
                  AND primary_key.is_primary_key = 1 
       INNER JOIN sys.index_columns index_columns 
               ON index_columns.object_id = primary_key.object_id 
                  AND index_columns.index_id = primary_key.index_id 
       INNER JOIN sys.columns TABLE_coumns 
               ON primary_key.object_id = TABLE_coumns.object_id 
                  AND TABLE_coumns.column_id = index_columns.column_id 
                  AND tbl.NAME = 'tblCity' 
ORDER  BY Schema_name(tbl.schema_id), 
          primary_key.[name], 
          index_columns.index_column_id  

आउटपुट:

डेटा देखने के लिए क्वेरी का उपयोग करें:

SELECT * FROM tblCity c

आउटपुट:

तालिका में विदेशी कुंजी कॉलम जोड़ें

मान लीजिए हम deptID . नाम का एक कॉलम जोड़ना चाहते हैं tblकर्मचारी . को टेबल। कॉलम का डेटा प्रकार INTEGER है। यह विभाग आईडी . का संदर्भ देता है tbldepartment . का स्तंभ टेबल।

क्वेरी निम्नलिखित है:

ALTER TABLE tblEmployee ADD deptID INTEGER,CONSTRAINT  FK_DepartmentID FOREIGN KEY(deptID) REFERENCES tbldepartment(departmentID)

नया विदेशी कुंजी कॉलम देखने के लिए अगली क्वेरी चलाएँ:

USE codingsight 
go 

SELECT Schema_name(tbl.schema_id) + '.' + tbl.NAME       AS foreign_table, 
       Schema_name(primarykey_tab.schema_id) + '.' 
       + primarykey_tab.NAME                             AS primary_table, 
       Substring(column_names, 1, Len(column_names) - 1) AS [fk_columns], 
       foreignkeys.NAME                                  AS fk_constraint_name 
FROM   sys.foreign_keys foreignkeys 
       INNER JOIN sys.tables tbl 
               ON tbl.object_id = foreignkeys.parent_object_id 
       INNER JOIN sys.tables primarykey_tab 
               ON primarykey_tab.object_id = foreignkeys.referenced_object_id 
       CROSS apply (SELECT col.[name] + ', ' 
                    FROM   sys.foreign_key_columns fk_columns 
                           INNER JOIN sys.columns col 
                                   ON fk_columns.parent_object_id = 
                                      col.object_id 
                                      AND fk_columns.parent_column_id = 
                                          col.column_id 
                    WHERE  fk_columns.parent_object_id = tbl.object_id 
                           AND fk_columns.constraint_object_id = 
                               foreignkeys.object_id 
                    ORDER  BY col.column_id 
                    FOR xml path ('')) D (column_names) 
ORDER  BY Schema_name(tbl.schema_id) + '.' + tbl.NAME, 
          Schema_name(primarykey_tab.schema_id) + '.' 
          + primarykey_tab.NAME   

आउटपुट:

ईआर आरेख पर ध्यान दें:

इस तरह, हमने FK_DepartmentID . नाम की एक विदेशी कुंजी बनाई है

जांच और डिफ़ॉल्ट बाधाओं के साथ एक कॉलम जोड़ें

अब, हम न्यूनतम_वेतन . नाम का एक कॉलम जोड़ते हैं कर्मचारी . को टेबल। कॉलम का डेटा प्रकार है पैसा

न्यूनतम_मजदूरी कॉलम का मान 5.60$ से अधिक या उसके बराबर होना चाहिए। इसलिए, हमने चेक . बनाया है सम्मिलित मूल्य को सत्यापित करने के लिए शर्त - यह 5.60$ से अधिक होना चाहिए। इसके अलावा, डिफ़ॉल्ट मान कॉलम का 5.60$ है।

कॉलम जोड़ने के लिए, निम्न क्वेरी चलाएँ:

USE codingsight 
go 
ALTER TABLE tblemployee 
ADD minimum_wages MONEY CONSTRAINT chk_minimum_wages CHECK (minimum_wages>=5.6)
CONSTRAINT df_minimum_wages DEFAULT 5.6;  
Next, we run the UPDATE query to change the values:
UPDATE tblemployee SET minimum_wages=5.5 WHERE employeeID =5;

निम्न त्रुटि होती है:

Msg 547, Level 16, State 0, Line 78
The UPDATE statement conflicted with the CHECK constraint "CHK_minimum_wages". 
The conflict occurred in database "CodingSight", table "dbo.tblemployee", column 'minimum_wages'.

न्यूनतम_मजदूरी . के लिए निर्दिष्ट मान कॉलम 5.6 से कम है। इसलिए क्वेरी ने एक त्रुटि लौटा दी है।

न्यूनतम_मजदूरी . का मान बदलें मूल्य और क्वेरी को फिर से निष्पादित करें:

UPDATE tblemployee SET minimum_wages=5.8 WHERE employeeID =5;

आउटपुट:

(1 row affected)
Completion time: 2020-12-14T17:22:40.8995851+05:30

एक बार जब हम रिकॉर्ड अपडेट कर लेते हैं, तो डेटा देखने के लिए नीचे दी गई क्वेरी चलाएँ:

Select * from tblemployee where employeeID=5

आउटपुट:

यह सत्यापित करने के लिए कि डिफ़ॉल्ट बाधा काम कर रही है, निम्नलिखित INSERT कथन चलाएँ:

USE codingsight 
GO
INSERT INTO tblemployee (name, Address, PhoneNumber,deptID) VALUES ('Dilip Patel','Satyamev Famosa, Gandhinagar','9537021112',1)

एक बार रिकॉर्ड डालने के बाद, आइए हम डेटा देखें:

प्रश्न:

USE CodingSight
go
SELECT * FROM tblemployee t WHERE t.employeeID=25

आउटपुट:

मैंने न्यूनतम_मजदूरी . का मान निर्दिष्ट नहीं किया है कॉलम। इसलिए, डिफ़ॉल्ट मान तालिका में डाला जाता है।

सारांश

लेख ने ALTER TABLE ADD COLUMN स्टेटमेंट, इसके सिंटैक्स और कार्यान्वयन के विभिन्न उपयोग के मामलों के सार को स्पष्ट किया।

यह भी पढ़ें

SQL सर्वर की मूल बातें ALTER TABLE Statement
तालिका से SQL DELETE कॉलम को समझना
DROP टेबल को समझना अगर SQL स्टेटमेंट मौजूद है


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर डेटाबेस का संस्करण बनाना

  2. SQL सर्वर में (nolock) के साथ क्या है?

  3. अनुसूची, सारणी की सीमाओं से बाहर थी। (Microsoft.SqlServer.smo)

  4. त्रुटि:टीसीपी प्रदाता:त्रुटि कोड 0x2746। टर्मिनल के माध्यम से लिनक्स में एसक्यूएल सेटअप के दौरान

  5. मैं SQL सर्वर में बिगिंट (यूनिक्स टाइमस्टैम्प) को डेटाटाइम में कैसे परिवर्तित कर सकता हूं?