Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL Server

Ràng buộc CHECK (Check Constraint) trong SQL Server

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;