Ràng buộc CHECK là gì?
Ràng buộc CHECK trong SQL Server định nghĩa điều kiện mà mỗi hàng trong bảng phải thỏa mãn.
Lưu ý:
- Không định nghĩa CHECK trên VIEW.
- CHECK chỉ tham chiếu cột trong cùng bảng, không tham chiếu bảng khác.
- Không dùng subquery trong CHECK.
- Tạo bằng CREATE TABLE hoặc ALTER TABLE.
Tạo CHECK khi CREATE TABLE
CREATE TABLE ten_bang (
cot1 kieu_du_lieu [NULL | NOT NULL],
cot2 kieu_du_lieu [NULL | NOT NULL],
...
CONSTRAINT ten_rang_buoc
CHECK [NOT FOR REPLICATION] (dieu_kien ten_cot)
);
Tham số:
- ten_bang: Tên bảng.
- ten_rang_buoc: Tên ràng buộc CHECK.
- ten_cot: Cột áp dụng ràng buộc.
- dieu_kien: Điều kiện phải thỏa mãn.
Ví dụ 1: Kiểm tra ID trong khoảng
CREATE TABLE nhanvien (
id_nhanvien INT NOT NULL,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50),
luong MONEY,
CONSTRAINT id_nhanvien_kiemtra
CHECK (id_nhanvien BETWEEN 1 AND 10000)
);
Ví dụ 2: Kiểm tra lương > 0
CREATE TABLE nhanvien (
id_nhanvien INT NOT NULL,
ho VARCHAR(50) NOT NULL,
ten VARCHAR(50),
luong MONEY,
CONSTRAINT luong_kiemtra
CHECK (luong > 0)
);
Tạo CHECK bằng ALTER TABLE
ALTER TABLE ten_bang
ADD CONSTRAINT ten_rang_buoc
CHECK (dieu_kien ten_cot);
Ví dụ: Giới hạn họ nhân viên
ALTER TABLE nhanvien
ADD CONSTRAINT ho_kiemtra
CHECK (ho IN ('Smith', 'Anderson', 'Jonas'));
Xóa ràng buộc CHECK
ALTER TABLE ten_bang
DROP CONSTRAINT ten_rang_buoc;
ALTER TABLE nhanvien
DROP CONSTRAINT ho_kiemtra;
Bật/KHÓA ràng buộc CHECK
Bật (ENABLE)
ALTER TABLE ten_bang
WITH CHECK CHECK CONSTRAINT ten_rang_buoc;
Tắt (DISABLE)
ALTER TABLE ten_bang
NOCHECK CONSTRAINT ten_rang_buoc;
Ví dụ bật/tắt
-- Bật
ALTER TABLE nhanvien
WITH CHECK CHECK CONSTRAINT luong_kiemtra;
-- Tắt
ALTER TABLE nhanvien
NOCHECK CONSTRAINT luong_kiemtra;