sql >> Database >  >> RDS >> Sqlserver

Basisprincipes van SQL Server ALTER TABLE-instructie

Dit artikel richt zich op de ALTER TABLE-instructie in SQL Server en de volgende taken op SQL Server-tabellen:

  1. Voeg een of meerdere kolommen toe aan een bestaande tabel.
  2. Wijzig een of meerdere kolommen van een tabel, met name:
    • Voeg beperkingen toe aan de kolom.
    • Wijzig het gegevenstype van de kolom.
  3. Laat de kolom van de SQL-tabel vallen.

Voor demonstratiedoeleinden heb ik een database gemaakt met de naam VSDatabase die de gegevens van de patiënt zal invoegen. Daar heb ik een tabel toegevoegd met de naam tblPatients . De tabelstructuur is als volgt:

Het volgende is het script om de tabel te maken:

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

Het volgende script voegt dummy-gegevens in de tblPatients tafel:

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

Laten we nu de instructie ALTER TABLE aan de hand van voorbeelden begrijpen.

Voeg één of meerdere kolommen toe aan een bestaande tabel

We kunnen een of meerdere kolommen toevoegen met behulp van de ALTER TABLE-opdracht. De syntaxis om de kolommen toe te voegen is als volgt:

ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..

Waar,

  1. tbl_name :specificeer de naam van de tabel waaraan u een nieuwe kolom wilt toevoegen.
  2. Column_name_1 gegevenstype :specificeer de kolomnaam en het gegevenstype. Wanneer u meerdere kolommen toevoegt, moet elk ervan worden gescheiden door een komma (,)

Voorbeeld

Ik wil een nieuwe kolom toevoegen met de naam first_name naar tblPatiënten . Om de kolom toe te voegen, voeren we de volgende query uit:

ALTER TABLE tblpatients ADD first_name VARCHAR(50)

Nu voegen we meerdere kolommen toe, de middle_name en achternaam kolommen naar de tblPatients tafel. Om dat te doen, voeren we de volgende query uit:

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

We kunnen information_schema.columns . doorzoeken of sys.columns tabellen om de nieuw toegevoegde kolommen te controleren. De vragen zijn de volgende:

Zoeken naar 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'

Uitgang:

Om Sys.columns te bevragen:

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

Uitgang:

Zoals je kunt zien, zijn de kolommen toegevoegd.

Wijzig de kolommen van een tabel

Nu willen we het wijzigen van kolommen van een tabel onderzoeken. Eerst moeten we begrijpen hoe we de naam van de kolom van de tabel kunnen veranderen.

Het gegevenstype van de bestaande tabel wijzigen

De syntaxis van ALTER TABLE om het datatype van de kolom te wijzigen is:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype

Waar,

  • tbl_name :de naam van de tabel waarin u het gegevenstype van de kolom moet wijzigen.
  • Kolomnaam :de kolomnaam en het gegevenstype. We moeten het nieuwe gegevenstype opgeven na het trefwoord ALTER COLUMN.

Laten we het datatype van de adreskolom wijzigen. De huidige lengte van de adreskolom is varchar(1000). We moeten de kolomlengte veranderen in varchar(50).

De vraag om het gegevenstype te wijzigen is als volgt:

Alter table tblpatients alter column address varchar(50)

Wanneer we de SQL-query uitvoeren, krijgen we de volgende foutmelding:

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

Dus terwijl we de lengte van de kolom verkleinen, moeten we de maximale lengte van het record bekijken en op basis daarvan wijzigen. In ons geval voeren we de volgende query uit om de maximale lengte van het record in het Adres te identificeren kolom:

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

Uitgang:

Volgens de uitvoer moet de minimumlengte van de adreskolom varchar(25) zijn.

Voer de volgende query uit om de lengte van de kolom te wijzigen:

Alter table tblpatients alter column address varchar(25)

Voer de volgende query uit om de lengte te controleren:

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

Uitgang:

Zoals u kunt zien, is de kolomlengte met succes gewijzigd.

Beperking toevoegen aan de kolom

We kunnen een beperking aan de kolom toevoegen door de instructie ALTER TABLE te gebruiken. De syntaxis van ALTER TABLE is als volgt:

ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name

Waar,

  • tbl_name :de naam van de tabel waarin u het gegevenstype van de kolom moet wijzigen.
  • Kolomnaam :de kolomnaam en het gegevenstype. Geef het nieuwe gegevenstype op na het trefwoord ALTER COLUMN.
  • Constraint_name :het type beperking. Het moet een van de volgende beperkingen zijn:
    • UNIEK
    • NIET NUL
    • CONTROLEER
    • STANDAARD
    • PRIMAIRE SLEUTEL
    • BUITENLANDSE SLEUTEL

Stel dat u een NIET NULL . wilt toevoegen beperking op de stad kolom. Voer de volgende ALTER TABLE . uit verklaring:

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

De syntaxis van het toevoegen van de PRIMAIRE SLEUTEL beperking is anders als u een primaire sleutel wilt toevoegen aan de patient_id kolom. Voer de volgende query uit om de beperking toe te voegen:

Alter table tblpatients add primary key (Patient_ID)

U krijgt de volgende foutmelding:

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.

Om de fout op te lossen, moeten we een NOT NULL-beperking maken voor de Patient_ID kolom. Voer de volgende query uit:

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

Zodra de beperking is toegevoegd, voegen we de primaire sleutel toe door de volgende query uit te voeren:

Alter table tblpatients add primary key (Patient_ID)

De primaire sleutel wordt met succes toegevoegd.

Voer de volgende query uit om de beperking op de tabel te bekijken:

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'

Uitgang:

Op deze manier is de primaire sleutelbeperking gecreëerd.

Laat een kolom van de tabel vallen

We kunnen een kolom laten vallen met de instructie ALTER TABLE. De syntaxis is:

ALTER TABLE tbl_name DROP Column column_name

Waar,

  • tbl_name :de naam van de tabel waar u een kolom wilt neerzetten.
  • Column_name:de kolom die u uit de tabel wilt verwijderen.

We hebben de first_name . toegevoegd en achternaam kolommen naar de tblPatients tafel. Daarom hebben we de patiëntnaam . niet nodig kolom.

Voer de volgende query uit om de kolom te verwijderen:

Alter table tblpatients drop column Patient_name

Opmerking: Als u een kolom verwijdert met een PRIMARY KEY- of FOREIGN KEY-beperking, moet u de beperking verwijderen voordat u de kolom verwijdert.

Samenvatting

Het artikel heeft het doel van de ALTER TABLE-instructie en de basisgebruiksscenario's onderzocht. We kunnen kolommen van de tabel toevoegen, wijzigen en verwijderen, evenals beperkingen in een tabel toevoegen met behulp van de ALTER TABLE-instructie. In het volgende artikel zal ik enkele geavanceerde beheeropties behandelen.

Lees ook

SQL Server begrijpen ALTER TABLE ADD COLUMN-instructie


  1. Hoe een record invoegen en de nieuw gemaakte ID retourneren met een enkele SqlCommand?

  2. Kan geen entiteitsgegevensmodel maken - met MySql en EF6

  3. java.sql.SQLException:geen geschikte driver gevonden voor jdbc:mysql://localhost:3306/dbname

  4. Postgres ERROR:kon het bestand niet openen om te lezen:toestemming geweigerd