Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memahami Pernyataan SQL Server ALTER TABLE ADD COLUMN

Artikel ini menjelaskan pernyataan SQL Server ALTER TABLE ADD COLUMN. Tujuan dari pernyataan ini adalah untuk menambahkan kolom baru ke tabel yang sudah ada. Selain itu, artikel ini akan mengklarifikasi kasus penggunaan berikut:

  1. Tambahkan beberapa kolom.
  2. Tambahkan kolom kunci utama baru.
  3. Tambahkan kolom kunci asing baru.
  4. Tambahkan kolom baru yang telah menghitung kolom.
  5. Tambahkan kolom baru yang memiliki batasan CHECK dan UNIQUE.

Kekhususan Sintaks dari Pernyataan SQL ALTER TABLE ADD COLUMN

Saat kita akan menjelajahi pernyataan secara menyeluruh, mari kita mulai dengan memahami sintaks:

Alter table [table_name] add column [column_name] [data_type][constraint]

Perhatikan aspek berikut:

  1. Anda perlu menentukan nama tabel tempat Anda ingin menambahkan kolom setelah ALTER TABEL .
  2. Nama kolom atau kolom harus setelah ADD . Untuk beberapa kolom, pisahkan namanya dengan koma.
  3. Tentukan tipe data kolom setelah nama kolom .
  4. Jika Anda menambahkan kendala apa pun, kunci utama, atau kunci asing , tentukan setelah tipe data .

Untuk tujuan demonstrasi, saya telah membuat database bernama CodingSight . Di sana, saya telah membuat tiga tabel bernama tbldepartment , pegawai, dan tblCity, dan memasukkan data dummy ke dalam tabel tersebut.

Script berikut membuat database dan tabel:

USE codingsight
GO
CREATE TABLE tbldepartment(departmentID INT IDENTITY(1,1), departmentname VARCHAR(50), 
CONSTRAINT PK_departmentID  PRIMARY KEY  (departmentID))
GO
CREATE TABLE tblemployee(employeeID INT IDENTITY(1,1), name VARCHAR(50), Address VARCHAR(max), PhoneNumber VARCHAR(10)
CONSTRAINT PK_employeeID  PRIMARY KEY  (employeeID))
GO
CREATE TABLE tblCity( Name VARCHAR(50), Country VARCHAR(100))
GO

Script di bawah ini memasukkan data dummy ke dalam tabel:

INSERT INTO tbldepartment (departmentname) VALUES ('IT'),('Devlopment Team'),('Human Resource'),('Qualiy Assurance')
GO
INSERT INTO tblemployee (name, address, PhoneNumber) VALUES 
('Nisarg Upadhyay','AB14, Akshardham Flats, Mehsana', 1234567890),
('Nirali Upadhyay','AB05, Suyojan Flats, Surat', 1234567890),
('Dixit Upadhyay','B14, Suyash Flats, Vadodara', 1234567890),
('Bharti Upadhyay','C14, Suramya Flats, Ahmedabad', 1234567890),
('Sawan panchal','P18, Kirti Flats, Ahmedabad', 1234567890),
('Raghav Dave','A14, Suramya Flats, Ahmedabad', 1234567890)
GO
INSERT INTO tblCity (name, country)VALUES 
('Ahmedabad','India'),
('Surat','India'),
('Vadodara','India'),
('Gandhinagar','India')
Go

Sekarang, mari kita lanjutkan ke kasus penggunaan.

Menambahkan Beberapa Kolom ke Tabel

Dalam contoh kita, kita ingin menambahkan Negara dan Kode PIN kolom ke tbleCity meja. Tipe data dari Negara kolom adalah VARCHAR, dan panjang kolom adalah 150. Tipe data Pincode kolom adalah INTEGER. Untuk menambahkan kolom, jalankan kueri berikut:

ALTER TABLE tblCity ADD State VARCHAR(150), Pincode INT

Sekarang, jalankan kueri untuk melihat daftar kolom tblCity tabel:

USE CodingSight
go
SELECT c.TABLE_SCHEMA,c.TABLE_NAME,c.COLUMN_NAME,c.DATA_TYPE,c.CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS c WHERE C.TABLE_NAME='tblCity'

Keluaran Kueri:

Seperti yang Anda lihat, Negara Bagian dan Kode PIN kolom telah ditambahkan.

Menambahkan Kolom Kunci Utama ke Tabel

Mari kita tambahkan kolom Kunci Utama ke tblCity meja. Sesuai dengan persyaratan bisnis, kita harus menambahkan kolom dengan kombinasi karakter dan empat digit angka untuk mengidentifikasi kota.

Kami menambahkan kolom baru bernama City_Code ke tblCity meja. Tipe data City_Code adalah varchar, dan panjangnya lima. Jalankan kueri berikut untuk menambahkan kolom:

ALTER TABLE tblCity ADD City_Code VARCHAR(5) PRIMARY KEY  CLUSTERED

Keluaran:

Msg 4901, Level 16, State 1, Line 29
ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column. 
Alternatively, if none of the previous conditions are satisfied the table must be empty to allow the addition of this column. 
Column 'City_Code' cannot be added to non-empty table 'tblCity' because it does not satisfy these conditions.

Kueri mengembalikan kesalahan karena kunci utama harus unik dan bukan nol. Untuk menambahkan kolom ke tabel ini, kita harus mengikuti langkah-langkah di bawah ini:

Langkah:1

Buat tabel kosong baru bernama tblCity_Temp menggunakan definisi tblCity . yang ada meja. Tabel baru memiliki kolom kunci utama.

Script pembuatannya adalah sebagai berikut:

CREATE TABLE tblCity_Temp( City_code VARCHAR(5) CONSTRAINT PK_City_Code PRIMARY KEY CLUSTERED,
Name VARCHAR(50), Country VARCHAR(100))
GO

Langkah:2

Masukkan data ke dalam tblCity_Temp tabel dari tblCity tabel:

INSERT INTO tblCity_Temp (City_code,name, country)VALUES 
('C0001','Ahmedabad','India'),
('C0002','Surat','India'),
('C0003','Vadodara','India'),
('C0004','Gandhinagar','India')
GO

Langkah:3

Ubah nama tabel seperti yang ditunjukkan di bawah ini:

  1. Nama Lama: tblCityNama Baru: tblCity_Old.
  2. Nama Lama: tblCity_TempNama Baru: tblCity .

Perhatikan kueri penggantian nama tabel:

USE codingsight 
go 

EXEC Sp_rename 
  'tblCity', 
  'tblCity_Old' 
go 

EXEC Sp_rename 
  'tblCity_Temp', 
  'tblCity' 
go

Sekarang, jalankan kueri berikut untuk melihat kunci utama yang baru ditambahkan:

USE codingsight 

go 

SELECT Schema_name(tbl.schema_id)    AS [schema_name], 
       primary_key.[name]            AS pk_name, 
       index_columns.index_column_id AS column_id, 
       TABLE_coumns.[name]           AS column_name, 
       tbl.[name]                    AS table_name 
FROM   sys.tables tbl 
       INNER JOIN sys.indexes primary_key 
               ON tbl.object_id = primary_key.object_id 
                  AND primary_key.is_primary_key = 1 
       INNER JOIN sys.index_columns index_columns 
               ON index_columns.object_id = primary_key.object_id 
                  AND index_columns.index_id = primary_key.index_id 
       INNER JOIN sys.columns TABLE_coumns 
               ON primary_key.object_id = TABLE_coumns.object_id 
                  AND TABLE_coumns.column_id = index_columns.column_id 
                  AND tbl.NAME = 'tblCity' 
ORDER  BY Schema_name(tbl.schema_id), 
          primary_key.[name], 
          index_columns.index_column_id  

Keluaran:

Gunakan kueri untuk melihat data:

SELECT * FROM tblCity c

Keluaran:

Menambahkan Kolom Kunci Asing ke Tabel

Misalkan kita ingin menambahkan kolom bernama deptID kepada tblKaryawan meja. Tipe data kolom adalah INTEGER. Ini merujuk pada departmentID kolom tbldepartemen tabel.

Pertanyaannya adalah sebagai berikut:

ALTER TABLE tblEmployee ADD deptID INTEGER,CONSTRAINT  FK_DepartmentID FOREIGN KEY(deptID) REFERENCES tbldepartment(departmentID)

Jalankan kueri berikutnya untuk melihat kolom kunci asing baru:

USE codingsight 
go 

SELECT Schema_name(tbl.schema_id) + '.' + tbl.NAME       AS foreign_table, 
       Schema_name(primarykey_tab.schema_id) + '.' 
       + primarykey_tab.NAME                             AS primary_table, 
       Substring(column_names, 1, Len(column_names) - 1) AS [fk_columns], 
       foreignkeys.NAME                                  AS fk_constraint_name 
FROM   sys.foreign_keys foreignkeys 
       INNER JOIN sys.tables tbl 
               ON tbl.object_id = foreignkeys.parent_object_id 
       INNER JOIN sys.tables primarykey_tab 
               ON primarykey_tab.object_id = foreignkeys.referenced_object_id 
       CROSS apply (SELECT col.[name] + ', ' 
                    FROM   sys.foreign_key_columns fk_columns 
                           INNER JOIN sys.columns col 
                                   ON fk_columns.parent_object_id = 
                                      col.object_id 
                                      AND fk_columns.parent_column_id = 
                                          col.column_id 
                    WHERE  fk_columns.parent_object_id = tbl.object_id 
                           AND fk_columns.constraint_object_id = 
                               foreignkeys.object_id 
                    ORDER  BY col.column_id 
                    FOR xml path ('')) D (column_names) 
ORDER  BY Schema_name(tbl.schema_id) + '.' + tbl.NAME, 
          Schema_name(primarykey_tab.schema_id) + '.' 
          + primarykey_tab.NAME   

Keluaran:

Perhatikan Diagram ER:

Dengan cara ini, kami telah membuat kunci asing bernama FK_DepartmentID .

Tambahkan Kolom dengan Batasan CHECK dan DEFAULT

Sekarang, mari kita tambahkan kolom bernama upah_minimum kepada pegawai meja. Tipe data kolom adalah uang .

upah_minimum nilai kolom harus lebih besar atau sama dengan 5,60$. Oleh karena itu, kami telah membuat cek kondisi untuk memverifikasi nilai yang dimasukkan – harus lebih tinggi dari $ 5,60. Selain itu, nilai default kolom adalah 5,60$.

Untuk menambahkan kolom, jalankan kueri berikut:

USE codingsight 
go 
ALTER TABLE tblemployee 
ADD minimum_wages MONEY CONSTRAINT chk_minimum_wages CHECK (minimum_wages>=5.6)
CONSTRAINT df_minimum_wages DEFAULT 5.6;  
Next, we run the UPDATE query to change the values:
UPDATE tblemployee SET minimum_wages=5.5 WHERE employeeID =5;

Terjadi kesalahan berikut:

Msg 547, Level 16, State 0, Line 78
The UPDATE statement conflicted with the CHECK constraint "CHK_minimum_wages". 
The conflict occurred in database "CodingSight", table "dbo.tblemployee", column 'minimum_wages'.

Nilai yang ditentukan untuk upah_minimum kolom kurang dari 5.6. Itu sebabnya kueri menghasilkan kesalahan.

Ubah nilai upah_minimum nilai dan jalankan kueri lagi:

UPDATE tblemployee SET minimum_wages=5.8 WHERE employeeID =5;

Keluaran:

(1 row affected)
Completion time: 2020-12-14T17:22:40.8995851+05:30

Setelah kami memperbarui catatan, jalankan kueri di bawah ini untuk melihat data:

Select * from tblemployee where employeeID=5

Keluaran:

Untuk memverifikasi bahwa batasan default berfungsi, jalankan pernyataan INSERT berikut:

USE codingsight 
GO
INSERT INTO tblemployee (name, Address, PhoneNumber,deptID) VALUES ('Dilip Patel','Satyamev Famosa, Gandhinagar','9537021112',1)

Setelah record dimasukkan, mari kita lihat datanya:

Permintaan:

USE CodingSight
go
SELECT * FROM tblemployee t WHERE t.employeeID=25

Keluaran:

Saya belum menentukan nilai upah_minimum kolom. Oleh karena itu, nilai default dimasukkan ke dalam tabel.

Ringkasan

Artikel tersebut mengklarifikasi esensi dari pernyataan ALTER TABLE ADD COLUMN, sintaksnya, dan berbagai kasus penggunaan implementasi.

Baca Juga

Dasar-dasar Pernyataan SQL Server ALTER TABLE
Memahami Kolom SQL DELETE dari tabel
Memahami DROP TABLE JIKA ADA Pernyataan SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masuk ke Microsoft SQL Server Kesalahan:18456

  2. Cara memasukkan data ke SQL Server

  3. Membuat pemicu audit di SQL Server

  4. Batas waktu koneksi untuk server SQL

  5. Siklus Melalui Clipboard Ring di SQL Server Management Studio (SSMS) - Tutorial SQL Server / TSQL Bagian 8