sql >> Databáze >  >> RDS >> Sqlserver

Základy SQL Serveru Příkaz ALTER TABLE

Tento článek se zaměřuje na příkaz ALTER TABLE v SQL Server a následující úlohy v tabulkách SQL Server:

  1. Přidejte jeden nebo více sloupců do existující tabulky.
  2. Upravte jeden nebo více sloupců tabulky, zejména:
    • Přidejte na sloupec omezení.
    • Změňte datový typ sloupce.
  3. Zrušte sloupec tabulky SQL.

Pro demonstrační účely jsem vytvořil databázi s názvem VSDatabase která vloží data pacientů. Tam jsem přidal tabulku s názvem tblPatients . Struktura tabulky je následující:

Skript pro vytvoření tabulky je následující:

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

Následující skript vloží fiktivní data do tblPatients tabulka:

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')

Nyní pochopme příkaz ALTER TABLE na příkladech.

Přidat jeden nebo více sloupců do existující tabulky

Můžeme přidat jeden nebo více sloupců pomocí příkazu ALTER TABLE. Syntaxe pro přidání sloupců je následující:

ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..

Kde,

  1. tbl_name :zadejte název tabulky, do které chcete přidat nový sloupec.
  2. Datový typ Column_name_1 :zadejte název sloupce a jeho datový typ. Když přidáte více sloupců, každý z nich musí být oddělen čárkou (,)

Příklad

Chci přidat nový sloupec s názvem first_name na tblPacients . Chcete-li přidat sloupec, spustíme následující dotaz:

ALTER TABLE tblpatients ADD first_name VARCHAR(50)

Nyní přidáme několik sloupců, middle_name a příjmení sloupců do tblPacients stůl. K tomu spustíme následující dotaz:

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

Můžeme se dotazovat information_schema.columns nebo sys.columns tabulky pro kontrolu nově přidaných sloupců. Dotazy jsou následující:

Chcete-li zadat dotaz 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'

Výstup:

Dotaz na Sys.columns:

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

Výstup:

Jak můžete vidět, sloupce byly přidány.

Upravte sloupce tabulky

Nyní chceme prozkoumat úpravy sloupců tabulky. Nejprve musíme pochopit, jak můžeme změnit název sloupce tabulky.

Změňte typ dat existující tabulky

Syntaxe ALTER TABLE pro změnu datového typu sloupce je:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype

Kde,

  • tbl_name :název tabulky, kde potřebujete změnit datový typ sloupce.
  • Název_sloupce :název sloupce a datový typ. Za klíčové slovo ALTER COLUMN musíme zadat nový datový typ.

Změňme datový typ sloupce adresy. Aktuální délka sloupce Adresa je varchar(1000). Musíme změnit délku sloupce na varchar(50).

Dotaz na úpravu datového typu je následující:

Alter table tblpatients alter column address varchar(50)

Při spuštění dotazu SQL se zobrazí následující chyba:

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

Takže při zmenšování délky sloupce musíme zkontrolovat maximální délku záznamu a na základě toho ji změnit. V našem případě spustíme následující dotaz k identifikaci maximální délky záznamu v Adresa sloupec:

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

Výstup:

Podle výstupu musí být minimální délka sloupce adresy varchar(25).

Spuštěním následujícího dotazu změňte délku sloupce:

Alter table tblpatients alter column address varchar(25)

Spuštěním následujícího dotazu ověřte délku:

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

Výstup:

Jak můžete vidět, délka sloupce byla úspěšně změněna.

Přidat omezení do sloupce

Do sloupce můžeme přidat omezení pomocí příkazu ALTER TABLE. Syntaxe ALTER TABLE je následující:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name

Kde,

  • tbl_name :název tabulky, kde potřebujete změnit datový typ sloupce.
  • Název_sloupce :název sloupce a datový typ. Zadejte nový datový typ za klíčové slovo ALTER COLUMN.
  • Constraint_name :typ omezení. Musí to být kterékoli z následujících omezení:
    • JEDINEČNÉ
    • NENÍ NULL
    • ZKONTROLUJTE
    • VÝCHOZÍ
    • PRIMÁRNÍ KLÍČ
    • ZAHRANIČNÍ KLÍČ

Předpokládejme, že chcete přidat NOT NULL omezení na město sloupec. Spusťte následující ALTER TABLE prohlášení:

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

Syntaxe přidání PRIMÁRNÍHO KLÍČE omezení je jiné, pokud chcete přidat primární klíč do id_patient sloupec. Chcete-li přidat omezení, proveďte následující dotaz:

Alter table tblpatients add primary key (Patient_ID)

Zobrazí se následující chyba:

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.

Abychom chybu opravili, musíme vytvořit omezení NOT NULL pro ID pacienta sloupec. Spusťte následující dotaz:

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

Jakmile je omezení přidáno, přidáme primární klíč spuštěním následujícího dotazu:

Alter table tblpatients add primary key (Patient_ID)

Primární klíč bude úspěšně přidán.

Chcete-li zobrazit omezení v tabulce, spusťte následující dotaz:

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'

Výstup:

Tímto způsobem bylo vytvořeno omezení primárního klíče.

Přetáhněte sloupec tabulky

Sloupec můžeme zrušit pomocí příkazu ALTER TABLE. Syntaxe je:

ALTER TABLE tbl_name DROP Column column_name

Kde,

  • tbl_name :název tabulky, do které chcete umístit sloupec.
  • Název_sloupce:sloupec, který chcete z tabulky odstranit.

Přidali jsme first_name a příjmení sloupců do tblPacients stůl. Nepožadujeme tedy jméno_pacienta sloupec.

Chcete-li sloupec zrušit, spusťte následující dotaz:

Alter table tblpatients drop column Patient_name

Poznámka: Pokud rušíte sloupec s omezením PRIMARY KEY nebo FOREIGN KEY, musíte před zrušením sloupce zrušit toto omezení.

Shrnutí

Článek prozkoumal účel příkazu ALTER TABLE a základní případy použití. Pomocí příkazu ALTER TABLE můžeme přidávat, upravovat a rušit sloupce tabulky a také přidávat omezení do tabulky. V příštím článku se budu zabývat některými pokročilými možnostmi správy.

Přečtěte si také

Vysvětlení SQL Server Příkaz ALTER TABLE ADD COLUMN


  1. Atomic UPSERT v SQL Server 2005

  2. ORA-00932:nekonzistentní datové typy:očekáváno - dostal CLOB

  3. Vyvarujte se sebeklamu v roztoku HA/DR

  4. Datový model správy událostí