Тази статия се фокусира върху израза ALTER TABLE в SQL Server и следните задачи в таблици на SQL Server:
- Добавете една или няколко колони към съществуваща таблица.
- Променете една или няколко колони на таблица, по-специално:
- Добавете ограничения към колоната.
- Променете типа данни на колоната.
- Изхвърлете колоната на SQL таблицата.
За демонстрационни цели създадох база данни с име VSDatabase което ще въведе данните на пациентите. Там добавих таблица с име tblPatients . Структурата на таблицата е както следва:
Следва скриптът за създаване на таблицата:
Use VSDatabase
Go
create table tblpatients
(
Patient_ID varchar(10),
Patient_name varchar(50),
Address varchar(500),
City varchar(50),
AppointmentDate datetime
)
Следният скрипт вмъква фиктивни данни в tblPatients таблица:
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')
Сега нека разберем израза ALTER TABLE с примери.
Добавете една или няколко колони към съществуваща таблица
Можем да добавим една или няколко колони с помощта на командата ALTER TABLE. Синтаксисът за добавяне на колоните е както следва:
ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..
Къде,
- tbl_name :посочете името на таблицата, в която искате да добавите нова колона.
- Тип данни_1_на_колона :посочете името на колоната и нейния тип данни. Когато добавяте няколко колони, всяка от тях трябва да бъде разделена със запетая (,)
Пример
Искам да добавя нова колона с име first_name доtblPatients . За да добавим колоната, изпълняваме следната заявка:
ALTER TABLE tblpatients ADD first_name VARCHAR(50)
Сега добавяме няколко колони, middle_name и фамилно_име колони към tblPatients маса. За да направим това, изпълняваме следната заявка:
ALTER TABLE tblpatients ADD middle_name VARCHAR(50),last_name VARCHAR(50)
Можем да направим заявка за information_schema.columns или sys.columns таблици, за да проверите новодобавените колони. Запитванията са следните:
За заявка за 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'
Изход:
За заявка за Sys.columns:
select object_name(object_id) [Table Name],name,max_length from sys.columns where object_id =object_id('tblpatients')
Изход:
Както можете да видите, колоните са добавени.
Промяна на колоните на таблица
Сега искаме да проучим модифицирането на колони на таблица. Първо, трябва да разберем как можем да променим името на колоната на таблицата.
Променете типа данни на съществуващата таблица
Синтаксисът на ALTER TABLE за промяна на типа данни на колоната е:
ALTER TABLE tbl_name ALTER COLUMN column_name datatype
Къде,
- tbl_name :името на таблицата, където трябва да промените типа данни на колоната.
- Име_на_колона :името на колоната и типа данни. Трябва да посочим новия тип данни след ключовата дума ALTER COLUMN.
Нека променим типа данни на адресната колона. Текущата дължина на колоната Адрес е varchar(1000). Трябва да променим дължината на колоната на varchar(50).
Заявката за промяна на типа данни е както следва:
Alter table tblpatients alter column address varchar(50)
Когато стартираме SQL заявката, получаваме следната грешка:
Msg 2628, Level 16, State 1, Line 1
String or binary data would be truncated in table 'VSDatabase.dbo.tblpatients', column 'Address'. Truncated value: ''.
Така че, докато намаляваме дължината на колоната, трябва да прегледаме максималната дължина на записа и въз основа на това да го променим. В нашия случай изпълняваме следната заявка, за да идентифицираме максималната дължина на записа в Адрес колона:
select len(Address) [Maximum length of column],Address from tblpatients
Изход:
Според изхода минималната дължина на колоната за адрес трябва да бъде varchar(25).
Изпълнете следната заявка, за да промените дължината на колоната:
Alter table tblpatients alter column address varchar(25)
Изпълнете следната заявка, за да проверите дължината:
select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'
Изход:
Както можете да видите, дължината на колоната е променена успешно.
Добавяне на ограничение към колоната
Можем да добавим ограничение към колоната, като използваме оператора ALTER TABLE. Синтаксисът на ALTER TABLE е както следва:
ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name
Къде,
- tbl_name :името на таблицата, където трябва да промените типа данни на колоната.
- Име_на_колона :името на колоната и типа данни. Посочете новия тип данни след ключовата дума ALTER COLUMN.
- Име_на_ограничение :типът на ограничението. Трябва да е някое от следните ограничения:
- УНИКАЛНО
- НЕ НУЛВО
- ПРОВЕРКА
- ПО ПОДРАЗБИРАНЕ
- ПЪРВИЧЕН КЛЮЧ
- ВЪНШЕН КЛЮЧ
Да предположим, че искате да добавите NOT NULL ограничение за града колона. Стартирайте следната ALTER TABLE изявление:
Alter table tblpatients alter column Patient_name varchar(50) not null
Синтаксисът на добавяне на ПЪРВИЧЕН КЛЮЧ ограничението е различно, ако искате да добавите първичен ключ към patient_id колона. За да добавите ограничението, изпълнете следната заявка:
Alter table tblpatients add primary key (Patient_ID)
Ще получите следната грешка:
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.
За да коригираме грешката, трябва да създадем ограничение NOT NULL за Patient_ID колона. Изпълнете следната заявка:
Alter table tblpatients alter column Patient_ID varchar(50) not null
След като ограничението е добавено, добавяме първичния ключ, като изпълняваме следната заявка:
Alter table tblpatients add primary key (Patient_ID)
Първичният ключ ще бъде добавен успешно.
За да видите ограничението в таблицата, изпълнете следната заявка:
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'
Изход:
По този начин ограничението за първичен ключ е създадено.
Пуснете колона от таблицата
Можем да пуснем колона с помощта на оператора ALTER TABLE. Синтаксисът е:
ALTER TABLE tbl_name DROP Column column_name
Къде,
- tbl_name :името на таблицата, където искате да пуснете колона.
- Column_name:колоната, която искате да премахнете от таблицата.
Добавихме first_name и фамилно_име колони към tblPatients маса. Следователно, ние не изискваме patent_name колона.
За да премахнете колоната, изпълнете следната заявка:
Alter table tblpatients drop column Patient_name
Забележка: Ако махнете колона с ограничение ПЪРВЕН КЛЮЧ или ВЪНШЕН КЛЮЧ, трябва да махнете ограничението, преди да махнете колоната.
Резюме
Статията изследва целта на оператора ALTER TABLE и основните случаи на употреба. Можем да добавяме, модифицираме и пускаме колони на таблицата, както и да добавяме ограничения в таблица с помощта на оператора ALTER TABLE. В следващата статия ще разгледам някои разширени опции за управление.
Прочетете също
Разбиране на SQL Server ALTER TABLE ADD COLUMN Statement