Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Grundlegendes zur SQL Server ALTER TABLE ADD COLUMN-Anweisung

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:

  1. Mehrere Spalten hinzufügen.
  2. Fügen Sie eine neue Primärschlüsselspalte hinzu.
  3. Fügen Sie eine neue Fremdschlüsselspalte hinzu.
  4. Fügen Sie neue Spalten mit berechneten Spalten hinzu.
  5. 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:

  1. Sie müssen den Namen der Tabelle angeben wo Sie nach eine Spalte hinzufügen möchten TABELLE ÄNDERN .
  2. Der Name der Spalte oder Spalten muss nach ADD sein . Trennen Sie bei mehreren Spalten die Namen durch Kommas.
  3. Geben Sie die Spaltendatentypen nach dem Spaltennamen an .
  4. 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:

  1. Alter Name: tblCityNeuer Name: tblCity_Old.
  2. Alter Name: tblCity_TempNeuer 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