Skenario:
Anda bekerja sebagai pengembang SQL Server, Anda perlu membuat tabel dbo.Customer yang harus memiliki kolom First Name, Age dan Age Type. Anda dapat menambahkan CustomerId sebagai Identitas. Anda perlu membuat Check Constraint pada Kolom Age dan Age Type dengan logika di bawah ini<65 agetype="Dewasa" dan="" p="">
Jika benar, biarkan penyisipan rekaman atau pembaruan gagal karena Batasan Pemeriksaan.
65>
<65 agetype="Adult" and="" p="">Solusi:65>
<65 agetype="Adult" and="" p="">Skrip di bawah ini dapat digunakan untuk menambahkan Batasan Pemeriksaan pada beberapa kolom sesuai dengan kebutuhan kami.65>
CREATE TABLE dbo.Customer ( CustomerId INT identity(1, 1) ,NAME VARCHAR(100) ,Age INT ,AgeType VARCHAR(15) ,CONSTRAINT dbo_Customer_AgeAndAgeType CHECK ( ( Age <= 17 AND AgeType = 'Child' ) OR ( Age > 17 AND Age < 65 AND AgeType = 'Adult' ) OR ( Age >= 65 AND AgeType = 'Senior' ) ) )
Mari kita masukkan beberapa record dan coba lihat apakah Check Constraint berfungsi seperti yang diharapkan.
--Correct values accrording to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Najaf',13,'Child') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Leena',14,'Adult') go --Correct values accroding to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Raza',30,'Adult') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Aamir',30,'Senior') go --Wrong values according to Check Constraint insert into dbo.Customer(Name,Age,AgeType) Values('John',65,'Adult') go --Correct values accroding to Constraint insert into dbo.Customer(Name,Age,AgeType) Values('Kris',65,'Senior') go
(1 baris terpengaruh)
Msg 547, Level 16, State 0, Line 25
Pernyataan INSERT bertentangan dengan batasan CHECK "dbo_Customer_AgeAndAgeType". Konflik terjadi di database "YourDatabaseName", tabel "dbo.Customer".
Pernyataan telah dihentikan.
(1 baris terpengaruh)
Msg 547, Level 16, State 0, Line 33
Pernyataan INSERT bertentangan dengan batasan CHECK "dbo_Customer_AgeAndAgeType". Konflik terjadi di database "YourDatabaseName", tabel "dbo.Customer".
Pernyataan telah dihentikan.
Msg 547, Level 16, State 0, Line 37
Pernyataan INSERT bertentangan dengan batasan CHECK "dbo_Customer_AgeAndAgeType". Konflik terjadi di database "YourDatabaseName", tabel "dbo.Customer".
Pernyataan telah dihentikan.
(1 baris terpengaruh)
Mari kita periksa data dalam tabel dengan menggunakan kueri pemilihan. Seperti yang dapat dilihat di bawah, satu-satunya catatan yang dimasukkan yang melewati Batasan Pemeriksaan. Catatan lainnya tidak dapat dimasukkan.
Cara membuat Batasan Pemeriksaan pada Beberapa Kolom di Tabel SQL Server |
Mari kita coba perbarui catatan dan lihat apakah Periksa Batasan berfungsi seperti yang diharapkan.
update dbo.Customer set Age=30 where Customerid=1
Gagal dengan kesalahan di bawah ini karena kami tidak dapat memiliki Usia 30 untuk AgeType='Child' menurut logika Batasan Pemeriksaan kami.
Msg 547, Level 16, State 0, Baris 18
Pernyataan UPDATE bertentangan dengan batasan CHECK "dbo_Customer_AgeAndAgeType". Konflik terjadi pada database "YourDatabaseName", tabel "dbo.Customer".
Pernyataan telah dihentikan.
Video Demo :Cara membuat Check Constraint pada Beberapa Kolom di SQL Server