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

Tambahkan Batasan CHECK ke Tabel yang Ada di SQL Server (T-SQL)

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbedaan Antara Tabel Sementara Lokal dan Global di SQL Server

  2. Cara Membuat Kunci Utama Komposit di SQL Server (Contoh T-SQL)

  3. Periksa Ruang yang Digunakan oleh Tabel di SQL Server

  4. SQL Pivot dengan banyak kolom

  5. Mengoptimalkan TempDB:Menghindari Kemacetan dan Masalah Kinerja