Dieser Artikel beschreibt die SQL Server-Anweisung ALTER TABLE ADD COLUMN. Der Zweck dieser Anweisung besteht darin, einer vorhandenen Tabelle eine neue Spalte hinzuzufügen. Außerdem erläutert der Artikel die folgenden Anwendungsfälle:
- Mehrere Spalten hinzufügen.
- Fügen Sie eine neue Primärschlüsselspalte hinzu.
- Fügen Sie eine neue Fremdschlüsselspalte hinzu.
- Fügen Sie neue Spalten mit berechneten Spalten hinzu.
- Fügen Sie eine neue Spalte mit CHECK- und UNIQUE-Einschränkungen hinzu.
Die Syntaxspezifität der SQL-Anweisung ALTER TABLE ADD COLUMN
Da wir die Anweisung gründlich untersuchen werden, beginnen wir damit, die Syntax zu verstehen:
Alter table [table_name] add column [column_name] [data_type][constraint]
Beachten Sie die folgenden Aspekte:
- Sie müssen den Namen der Tabelle angeben wo Sie nach eine Spalte hinzufügen möchten TABELLE ÄNDERN .
- Der Name der Spalte oder Spalten muss nach ADD sein . Trennen Sie bei mehreren Spalten die Namen durch Kommas.
- Geben Sie die Spaltendatentypen nach dem Spaltennamen an .
- Wenn Sie eine Einschränkung, einen Primärschlüssel oder einen Fremdschlüssel hinzufügen , geben Sie ihn nach dem Datentyp an .
Zu Demonstrationszwecken habe ich eine Datenbank namens CodingSight erstellt . Dort habe ich drei Tabellen namens tbldepartment erstellt , Mitarbeiter und tblCity, und Dummy-Daten in diese Tabellen eingefügt.
Das folgende Skript erstellt eine Datenbank und Tabellen:
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
Das folgende Skript fügt die Dummy-Daten in die Tabelle ein:
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
Kommen wir nun zu den Anwendungsfällen.
Mehrere Spalten zu einer Tabelle hinzufügen
In unserem Beispiel möchten wir den Staat hinzufügen und PIN Spalten zur tbleCity Tisch. Der Datentyp desStatus Spalte ist VARCHAR, und die Länge der Spalte ist 150. Der Datentyp des Pincode Spalte ist INTEGER. Führen Sie zum Hinzufügen von Spalten die folgende Abfrage aus:
ALTER TABLE tblCity ADD State VARCHAR(150), Pincode INT
Führen Sie nun die Abfrage aus, um die Spaltenliste von tblCity anzuzeigen Tabelle:
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'
Die Abfrageausgabe:
Wie Sie sehen können, ist der Status und PIN Spalten wurden hinzugefügt.
Primärschlüsselspalten zu einer Tabelle hinzufügen
Lassen Sie uns die Primärschlüsselspalte zu tblCity hinzufügen Tisch. Gemäß den geschäftlichen Anforderungen müssen wir eine Spalte mit einer Kombination aus einem Buchstaben und einer vierstelligen Zahl hinzufügen, um die Stadt zu identifizieren.
Wir fügen eine neue Spalte namens City_Code hinzu zur tblCity Tisch. Der Datentyp des City_Code ist varchar, und die Länge ist fünf. Führen Sie die folgende Abfrage aus, um eine Spalte hinzuzufügen:
ALTER TABLE tblCity ADD City_Code VARCHAR(5) PRIMARY KEY CLUSTERED
Die Ausgabe:
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.
Die Abfrage gibt einen Fehler zurück, da der Primärschlüssel eindeutig und nicht null sein muss. Um dieser Tabelle eine Spalte hinzuzufügen, müssen wir die folgenden Schritte ausführen:
Schritt:1
Erstellen Sie eine neue leere Tabelle namens tblCity_Temp unter Verwendung der Definition der bestehenden tblCity Tisch. Die neue Tabelle hat eine Primärschlüsselspalte.
Das Erstellungsskript lautet wie folgt:
CREATE TABLE tblCity_Temp( City_code VARCHAR(5) CONSTRAINT PK_City_Code PRIMARY KEY CLUSTERED,
Name VARCHAR(50), Country VARCHAR(100))
GO
Schritt:2
Fügen Sie die Daten in tblCity_Temp ein Tabelle aus tblCity Tabelle:
INSERT INTO tblCity_Temp (City_code,name, country)VALUES
('C0001','Ahmedabad','India'),
('C0002','Surat','India'),
('C0003','Vadodara','India'),
('C0004','Gandhinagar','India')
GO
Schritt:3
Benennen Sie die Tabellen wie unten gezeigt um:
- Alter Name: tblCity – Neuer Name: tblCity_Old.
- Alter Name: tblCity_Temp – Neuer Name: tblCity .
Achten Sie auf die Abfrage zur Tabellenumbenennung:
USE codingsight
go
EXEC Sp_rename
'tblCity',
'tblCity_Old'
go
EXEC Sp_rename
'tblCity_Temp',
'tblCity'
go
Führen Sie nun die folgende Abfrage aus, um den neu hinzugefügten Primärschlüssel anzuzeigen:
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
Die Ausgabe:
Verwenden Sie die Abfrage für die Datenansicht:
SELECT * FROM tblCity c
Die Ausgabe:
Fremdschlüsselspalten zu einer Tabelle hinzufügen
Angenommen, wir möchten eine Spalte namens deptID hinzufügen an den tblEmployee Tisch. Der Datentyp der Spalte ist INTEGER. Es verweist auf die departmentID Spalte der tbldepartment Tabelle.
Die Abfrage lautet wie folgt:
ALTER TABLE tblEmployee ADD deptID INTEGER,CONSTRAINT FK_DepartmentID FOREIGN KEY(deptID) REFERENCES tbldepartment(departmentID)
Führen Sie die nächste Abfrage aus, um die neue Fremdschlüsselspalte anzuzeigen:
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
Die Ausgabe:
Beachten Sie das ER-Diagramm:
Auf diese Weise haben wir einen Fremdschlüssel namens FK_DepartmentID erstellt .
Fügen Sie eine Spalte mit CHECK und DEFAULT Constraint hinzu
Lassen Sie uns nun eine Spalte namens minimum_wages hinzufügen an den Arbeitnehmer Tisch. Der Datentyp der Spalte ist Geld .
Der Mindestlohn Der Wert der Spalte muss größer oder gleich 5,60 $ sein. Deshalb haben wir den Check erstellt Bedingung, um den eingegebenen Wert zu überprüfen – er muss höher als 5,60 $ sein. Außerdem der Standardwert der Spalte beträgt 5,60 $.
Führen Sie die folgende Abfrage aus, um die Spalte hinzuzufügen:
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;
Der folgende Fehler tritt auf:
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'.
Der für minimum_wages angegebene Wert Spalte ist kleiner als 5,6. Aus diesem Grund hat die Abfrage einen Fehler zurückgegeben.
Ändern Sie den Wert von minimum_wages value und führen Sie die Abfrage erneut aus:
UPDATE tblemployee SET minimum_wages=5.8 WHERE employeeID =5;
Die Ausgabe:
(1 row affected)
Completion time: 2020-12-14T17:22:40.8995851+05:30
Sobald wir den Datensatz aktualisiert haben, führen Sie die folgende Abfrage aus, um die Daten anzuzeigen:
Select * from tblemployee where employeeID=5
Die Ausgabe:
Führen Sie die folgende INSERT-Anweisung aus, um zu überprüfen, ob die Standardeinschränkung funktioniert:
USE codingsight
GO
INSERT INTO tblemployee (name, Address, PhoneNumber,deptID) VALUES ('Dilip Patel','Satyamev Famosa, Gandhinagar','9537021112',1)
Sobald der Datensatz eingefügt ist, lassen Sie uns die Daten anzeigen:
Die Abfrage:
USE CodingSight
go
SELECT * FROM tblemployee t WHERE t.employeeID=25
Die Ausgabe:
Ich habe den Wert von minimum_wages nicht angegeben Säule. Daher wird der Standardwert in die Tabelle eingefügt.
Zusammenfassung
Der Artikel erläuterte das Wesentliche der ALTER TABLE ADD COLUMN-Anweisung, ihre Syntax und verschiedene Anwendungsfälle von Implementierungen.
Lesen Sie auch
Grundlagen der SQL Server ALTER TABLE-Anweisung
Grundlegendes zu SQL DELETE Column from table
Verständnis der SQL-Anweisung DROP TABLE IF EXISTS