Denne artikel fokuserer på ALTER TABLE-sætningen i SQL Server og følgende opgaver på SQL Server-tabeller:
- Tilføj en eller flere kolonner til en eksisterende tabel.
- Rediger en eller flere kolonner i en tabel, især:
- Tilføj begrænsninger på kolonnen.
- Skift kolonnens datatype.
- Slip kolonnen i SQL-tabellen.
Til demonstrationsformål har jeg oprettet en database ved navn VSDatabase der vil indsætte patienternes data. Der har jeg tilføjet en tabel med navnet tblPatients . Tabelstrukturen er som følger:
Følgende er scriptet til at oprette tabellen:
Use VSDatabase
Go
create table tblpatients
(
Patient_ID varchar(10),
Patient_name varchar(50),
Address varchar(500),
City varchar(50),
AppointmentDate datetime
)
Følgende script indsætter dummy-data i tblPatients tabel:
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')
Lad os nu forstå ALTER TABLE-sætningen ved hjælp af eksempler.
Tilføj en eller flere kolonner til en eksisterende tabel
Vi kan tilføje en eller flere kolonner ved hjælp af kommandoen ALTER TABLE. Syntaksen for at tilføje kolonnerne er som følger:
ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..
Hvor,
- tbl_name :Angiv navnet på den tabel, hvor du vil tilføje en ny kolonne.
- Datatype Column_name_1 :angiv kolonnenavnet og dets datatype. Når du tilføjer flere kolonner, skal hver af dem adskilles med et komma (,)
Eksempel
Jeg vil tilføje en ny kolonne med navnet fornavn til tblPatients . For at tilføje kolonnen kører vi følgende forespørgsel:
ALTER TABLE tblpatients ADD first_name VARCHAR(50)
Nu tilføjer vi flere kolonner, mellemnavnet og efternavn kolonner til tblPatients bord. For at gøre det kører vi følgende forespørgsel:
ALTER TABLE tblpatients ADD middle_name VARCHAR(50),last_name VARCHAR(50)
Vi kan forespørge information_schema.columns eller sys.columns tabeller for at kontrollere de nyligt tilføjede kolonner. Forespørgslerne er følgende:
For at forespørge informationsskema.kolonner :
select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'
Output:
Sådan forespørger Sys.columns:
select object_name(object_id) [Table Name],name,max_length from sys.columns where object_id =object_id('tblpatients')
Output:
Som du kan se, er kolonnerne blevet tilføjet.
Rediger kolonnerne i en tabel
Nu vil vi udforske ændring af kolonner i en tabel. Først skal vi forstå, hvordan vi kan ændre navnet på tabellens kolonne.
Skift datatypen for den eksisterende tabel
Syntaksen for ALTER TABLE for at ændre kolonnens datatype er:
ALTER TABLE tbl_name ALTER COLUMN column_name datatype
Hvor,
- tbl_name :navnet på den tabel, hvor du skal ændre kolonnens datatype.
- Kolonne_navn :kolonnenavnet og datatypen. Vi skal angive den nye datatype efter søgeordet ALTER COLUMN.
Lad os ændre datatypen for adressekolonnen. Den aktuelle længde af adressekolonnen er varchar(1000). Vi skal ændre kolonnelængden til varchar(50).
Forespørgslen for at ændre datatypen er som følger:
Alter table tblpatients alter column address varchar(50)
Når vi kører SQL-forespørgslen, får vi følgende fejlmeddelelse:
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å mens vi reducerer kolonnens længde, skal vi gennemgå den maksimale længde af posten og, baseret på det, ændre den. I vores tilfælde kører vi følgende forespørgsel for at identificere den maksimale længde af posten i Adressen kolonne:
select len(Address) [Maximum length of column],Address from tblpatients
Output:
Ifølge output skal den mindste længde af adressekolonnen være varchar(25).
Kør følgende forespørgsel for at ændre længden af kolonnen:
Alter table tblpatients alter column address varchar(25)
Kør følgende forespørgsel for at bekræfte længden:
select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'
Output:
Som du kan se, er kolonnelængden blevet ændret.
Tilføj begrænsning på kolonnen
Vi kan tilføje en begrænsning til kolonnen ved at bruge ALTER TABLE-sætningen. ALTER TABLE-syntaksen er som følger:
ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name
Hvor,
- tbl_name :navnet på den tabel, hvor du skal ændre kolonnens datatype.
- Kolonne_navn :kolonnenavnet og datatypen. Angiv den nye datatype efter ALTER COLUMN søgeord.
- Begrænset_navn :typen af begrænsning. Det skal være en af følgende begrænsninger:
- UNIKT
- IKKE NULL
- TJEK
- STANDARD
- PRIMÆR NØGLE
- UDLANDS NØGLE
Antag, at du vil tilføje en NOT NULL begrænsning for byen kolonne. Kør følgende ALTER TABLE erklæring:
Alter table tblpatients alter column Patient_name varchar(50) not null
Syntaksen for tilføjelse af den PRIMÆR NØGLE begrænsning er anderledes, hvis du vil tilføje en primær nøgle på patient_id kolonne. For at tilføje begrænsningen skal du udføre følgende forespørgsel:
Alter table tblpatients add primary key (Patient_ID)
Du vil modtage følgende fejlmeddelelse:
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.
For at rette fejlen skal vi oprette en NOT NULL-begrænsning på Patient_ID kolonne. Kør følgende forespørgsel:
Alter table tblpatients alter column Patient_ID varchar(50) not null
Når begrænsningen er tilføjet, tilføjer vi den primære nøgle ved at køre følgende forespørgsel:
Alter table tblpatients add primary key (Patient_ID)
Den primære nøgle vil blive tilføjet.
For at se begrænsningen på tabellen skal du køre følgende forespørgsel:
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'
Output:
På denne måde er den primære nøglebegrænsning blevet oprettet.
Slip en kolonne i tabellen
Vi kan droppe en kolonne ved hjælp af ALTER TABLE-sætningen. Syntaksen er:
ALTER TABLE tbl_name DROP Column column_name
Hvor,
- tbl_name :navnet på den tabel, hvor du vil slippe en kolonne.
- Kolonne_navn:den kolonne, du vil fjerne fra tabellen.
Vi har tilføjet fornavnet og efternavn kolonner til tblPatients bord. Derfor kræver vi ikke patientnavnet kolonne.
For at slette kolonnen skal du køre følgende forespørgsel:
Alter table tblpatients drop column Patient_name
Bemærk: Hvis du sletter en kolonne med en PRIMARY KEY- eller FOREIGN KEY-begrænsning, skal du slette begrænsningen, før du sletter kolonnen.
Oversigt
Artiklen har udforsket formålet med ALTER TABLE-sætningen og de grundlæggende brugssager. Vi kan tilføje, ændre og slette kolonner i tabellen, samt tilføje begrænsninger i en tabel ved hjælp af ALTER TABLE-sætningen. I den næste artikel vil jeg dække nogle avancerede administrationsmuligheder.
Læs også
Forstå SQL Server ÆNDRINGSTABEL TILFØJ KOLONNE-sætning