sql >> Databasteknik >  >> RDS >> Sqlserver

Grunderna i SQL Server ALTER TABLE Statement

Den här artikeln fokuserar på ALTER TABLE-satsen i SQL Server och följande uppgifter på SQL Server-tabeller:

  1. Lägg till en eller flera kolumner i en befintlig tabell.
  2. Ändra en eller flera kolumner i en tabell, särskilt:
    • Lägg till begränsningar i kolumnen.
    • Ändra datatypen för kolumnen.
  3. Släpp kolumnen i SQL-tabellen.

I demonstrationssyfte har jag skapat en databas med namnet VSDatabase som kommer att infoga patientens data. Där har jag lagt till en tabell som heter tblPatients . Tabellstrukturen är som följer:

Följande är skriptet för att skapa tabellen:

Use VSDatabase
Go
create table tblpatients
(
Patient_ID varchar(10),
Patient_name varchar(50),
Address varchar(500),
City varchar(50),
AppointmentDate datetime
)

Följande skript infogar dummy-data i tblPatients tabell:

insert into tblpatients (Patient_ID,Patient_name,Address,City,AppointmentDate)
values
('OPD00001','Nisarg Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-10'),
('OPD00002','Nirali Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-11'),
('OPD00003','Manushi Bhatt ','B-50, Suramya Flats','Surat','2021-02-10'),
('OPD00004','Arjun Bhatt','B-50, Suramya Flats','Surat','2021-02-12'),
('OPD00005','Dixit Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-09')

Låt oss nu förstå ALTER TABLE-satsen med exempel.

Lägg till en eller flera kolumner i en befintlig tabell

Vi kan lägga till en eller flera kolumner med kommandot ALTER TABLE. Syntaxen för att lägga till kolumnerna är följande:

ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..

Var,

  1. tbl_name :ange namnet på tabellen där du vill lägga till en ny kolumn.
  2. Datatyp Kolumnnamn_1 :ange kolumnnamnet och dess datatyp. När du lägger till flera kolumner måste var och en av dem separeras med ett kommatecken (,)

Exempel

Jag vill lägga till en ny kolumn med namnet förnamn till tblPatients . För att lägga till kolumnen kör vi följande fråga:

ALTER TABLE tblpatients ADD first_name VARCHAR(50)

Nu lägger vi till flera kolumner, mellannamnet och efternamn kolumner till tblPatients tabell. För att göra det kör vi följande fråga:

ALTER TABLE tblpatients ADD middle_name VARCHAR(50),last_name VARCHAR(50)

Vi kan fråga information_schema.columns eller sys.columns tabeller för att kontrollera de nyligen tillagda kolumnerna. Frågorna är följande:

För att fråga information_schema.columns :

select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'

Utdata:

För att fråga Sys.columns:

select object_name(object_id) [Table Name],name,max_length from sys.columns where object_id =object_id('tblpatients')

Utdata:

Som du kan se har kolumnerna lagts till.

Ändra kolumnerna i en tabell

Nu vill vi utforska att ändra kolumner i en tabell. Först måste vi förstå hur vi kan ändra namnet på tabellens kolumn.

Ändra datatypen för den befintliga tabellen

Syntaxen för ALTER TABLE för att ändra datatypen för kolumnen är:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype

Var,

  • tbl_name :namnet på tabellen där du behöver ändra kolumnens datatyp.
  • Kolumnnamn :kolumnnamnet och datatypen. Vi måste ange den nya datatypen efter nyckelordet ALTER COLUMN.

Låt oss ändra datatypen för adresskolumnen. Den aktuella längden på adresskolumnen är varchar(1000). Vi måste ändra kolumnlängden till varchar(50).

Frågan för att ändra datatypen är som följer:

Alter table tblpatients alter column address varchar(50)

När vi kör SQL-frågan får vi följande felmeddelande:

Msg 2628, Level 16, State 1, Line 1
String or binary data would be truncated in table 'VSDatabase.dbo.tblpatients', column 'Address'. Truncated value: ''.

Så samtidigt som vi minskar kolumnens längd måste vi granska den maximala längden på posten och, baserat på det, ändra den. I vårt fall kör vi följande fråga för att identifiera den maximala längden på posten i Adressen kolumn:

select len(Address) [Maximum length of column],Address from tblpatients

Utdata:

Enligt utdata måste adresskolumnens minsta längd vara varchar(25).

Kör följande fråga för att ändra längden på kolumnen:

Alter table tblpatients alter column address varchar(25)

Kör följande fråga för att verifiera längden:

select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'

Utdata:

Som du kan se har kolumnlängden ändrats.

Lägg till begränsning i kolumnen

Vi kan lägga till en begränsning i kolumnen genom att använda ALTER TABLE-satsen. Syntaxen för ALTER TABLE är följande:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name

Var,

  • tbl_name :namnet på tabellen där du behöver ändra kolumnens datatyp.
  • Kolumnnamn :kolumnnamnet och datatypen. Ange den nya datatypen efter nyckelordet ALTER COLUMN.
  • Constraint_name :typen av begränsning. Det måste vara någon av följande begränsningar:
    • UNIKT
    • INTE NULL
    • KONTROLLERA
    • STANDARD
    • PRIMÄRNYCKEL
    • UTLANDSNYCKEL

Anta att du vill lägga till en NOT NULL begränsning för staden kolumn. Kör följande ALTER TABLE uttalande:

Alter table tblpatients alter column Patient_name varchar(50) not null

Syntaxen för att lägga till PRIMÄRKEY begränsning är annorlunda om du vill lägga till en primärnyckel på patient_id kolumn. För att lägga till begränsningen, kör följande fråga:

Alter table tblpatients add primary key (Patient_ID)

Du kommer att få följande felmeddelande:

Msg 8111, Level 16, State 1, Line 17
Cannot define PRIMARY KEY constraint on nullable column in table 'tblpatients'.
Msg 1750, Level 16, State 0, Line 17
Could not create constraint or index. See previous errors.

För att åtgärda felet måste vi skapa en NOT NULL-begränsning på Patient_ID kolumn. Kör följande fråga:

Alter table tblpatients alter column Patient_ID varchar(50) not null

När begränsningen har lagts till lägger vi till primärnyckeln genom att köra följande fråga:

Alter table tblpatients add primary key (Patient_ID)

Den primära nyckeln kommer att läggas till.

För att se begränsningen i tabellen, kör följande fråga:

SELECT OBJECT_NAME(object_id) AS ConstraintName,
SCHEMA_NAME(schema_id) AS SchemaName,
type_desc AS ConstraintType
FROM sys.objects
WHERE type_desc LIKE '%CONSTRAINT' AND OBJECT_NAME(parent_object_id)='tblpatients'

Utdata:

På detta sätt har den primära nyckelbegränsningen skapats.

Släpp en kolumn i tabellen

Vi kan släppa en kolumn med ALTER TABLE-satsen. Syntaxen är:

ALTER TABLE tbl_name DROP Column column_name

Var,

  • tbl_name :namnet på tabellen där du vill släppa en kolumn.
  • Kolumnnamn:kolumnen som du vill ta bort från tabellen.

Vi har lagt till förnamn och efternamn kolumner till tblPatients tabell. Därför kräver vi inte patientnamn kolumn.

För att ta bort kolumnen, kör följande fråga:

Alter table tblpatients drop column Patient_name

Obs! Om du släpper en kolumn med en PRIMARY KEY- eller FOREIGN KEY-begränsning måste du släppa begränsningen innan du släpper kolumnen.

Sammanfattning

Artikeln har utforskat syftet med ALTER TABLE-satsen och de grundläggande användningsfallen. Vi kan lägga till, ändra och släppa kolumner i tabellen, samt lägga till begränsningar i en tabell med hjälp av ALTER TABLE-satsen. I nästa artikel kommer jag att täcka några avancerade hanteringsalternativ.

Läs också

Förstå SQL Server ALTER TABLE ADD COLUMN Statement


  1. Hur ser jag vilken teckenuppsättning en MySQL-databas/tabell/kolumn är?

  2. Hur man genererar ett skript från ett diagram i MySQL Workbench

  3. Dela upp värden över flera rader

  4. Hur uppdaterar jag Identity Column i SQL Server?