Artikel ini menunjukkan cara menambahkan CHECK
batasan ke tabel yang ada.
Anda dapat menambahkan batasan ke tabel yang ada dengan menggunakan ALTER TABLE
pernyataan bersama dengan ADD CONSTRAINT
argumen. Contoh di bawah.
Contoh 1 – Membuat Tabel
Pertama, mari buat tabel yang akan ditambahkan CHECK
kendala.
CREATE TABLE Event ( EventId int IDENTITY(1,1) NOT NULL PRIMARY KEY, EventName varchar(255) NOT NULL, StartDate date NOT NULL, EndDate date NOT NULL, Price smallmoney NOT NULL );
Contoh 2 – Tambahkan Batasan Tingkat Kolom
Sekarang mari tambahkan CHECK
kendala pada
Harga
kolom.
ALTER TABLE Event ADD CONSTRAINT chkPrice CHECK (Price > 0);
Batasan ini akan memastikan bahwa harga selalu lebih besar dari nol.
Sekarang batasan telah ditambahkan, inilah yang terjadi jika kami mencoba memasukkan data yang tidak valid:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 0 );
Hasil:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkPrice". The conflict occurred in database "EMS", table "dbo.Event", column 'Price'.
Dalam hal ini, CHECK
batasan menentukan bahwa semua data dalam Price
kolom harus lebih besar dari 0. Dengan kata lain, harga tidak boleh nol dan tidak boleh negatif.
Ini disebut sebagai batasan tingkat kolom , karena didefinisikan pada satu kolom. Ini berlaku untuk data dalam satu kolom.
Contoh 3 – Tambahkan Batasan Tingkat Tabel
Sekarang mari tambahkan CHECK
tingkat tabel paksaan. Ini akan memeriksa data dalam dua kolom.
ALTER TABLE Event ADD CONSTRAINT chkEndDate CHECK (EndDate >= StartDate);
Dalam hal ini saya menambahkan batasan untuk memastikan bahwa tanggal akhir tidak boleh lebih awal dari tanggal mulai. Ini memeriksa data di dua kolom dan karenanya merupakan batasan tingkat tabel.
Coba masukkan nilai yang tidak valid:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '1970-02-02', 150.00 );
Hasil:
Msg 547, Level 16, State 0, Line 1 The INSERT statement conflicted with the CHECK constraint "chkEndDate". The conflict occurred in database "EMS", table "dbo.Event".
Seperti yang diharapkan, operasi gagal, karena tanggal akhir saya lebih awal dari tanggal mulai.
Perhatikan bahwa untuk menguji batasan ini, saya harus menaikkan harga ke nilai yang valid untuk mencegah batasan sebelumnya dipicu terlebih dahulu (CHECK
batasan divalidasi sesuai urutan pembuatannya).
Contoh 4 – Berhasil Memasukkan Data yang Sesuai dengan Batasan
Agar berhasil menyisipkan baris, yang perlu kita lakukan adalah memastikan bahwa kita memasukkan nilai yang valid.
Contoh:
INSERT INTO Event ( EventName, StartDate, EndDate, Price ) VALUES ( 'ICCC 2020', '2020-01-01', '2020-02-02', 150.00 ); SELECT * FROM Event;
Hasil:
+-----------+-------------+-------------+------------+----------+ | EventId | EventName | StartDate | EndDate | Price | |-----------+-------------+-------------+------------+----------| | 4 | ICCC 2020 | 2020-01-01 | 2020-02-02 | 150.0000 | +-----------+-------------+-------------+------------+----------+
Perhatikan bahwa
EventId
kolom telah bertambah menjadi 4. Ini karena ini adalah IDENTITY
kolom. Hal penting yang perlu diingat tentang IDENTITY
kolom adalah bahwa mereka bertambah bahkan ketika kendala menyebabkan INSERT
operasi gagal.
Beberapa Batasan Batasan CHECK
Berikut adalah beberapa batasan yang harus diperhatikan saat bekerja dengan CHECK
kendala:
- Kondisi pencarian harus mengevaluasi ke ekspresi Boolean dan tidak dapat mereferensikan tabel lain.
- Ekspresi tidak boleh berisi tipe data alias.
CHECK
batasan tidak dapat ditentukan pada teks , nteks , atau gambar kolom.