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:
- Tambahkan beberapa kolom.
- Tambahkan kolom kunci utama baru.
- Tambahkan kolom kunci asing baru.
- Tambahkan kolom baru yang telah menghitung kolom.
- 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:
- Anda perlu menentukan nama tabel tempat Anda ingin menambahkan kolom setelah ALTER TABEL .
- Nama kolom atau kolom harus setelah ADD . Untuk beberapa kolom, pisahkan namanya dengan koma.
- Tentukan tipe data kolom setelah nama kolom .
- 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:
- Nama Lama: tblCity – Nama Baru: tblCity_Old.
- Nama Lama: tblCity_Temp – Nama 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