CHECK-ограничение — это механизм валидации данных на уровне таблицы в SQL Server, который гарантирует, что значения в столбце удовлетворяют определенному логическому условию. Это декларативный способ обеспечения целостности данных без необходимости написания триггеров или процедур.
Уровень проверки:
Условия:
CONSTRAINT CHK_Price CHECK (Price > 0 AND Price < 10000)
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName NVARCHAR(100),
Price DECIMAL(10,2) CHECK (Price > 0),
Discount DECIMAL(10,2),
CONSTRAINT CHK_Discount CHECK (Discount >= 0 AND Discount <= Price)
)
ALTER TABLE Employees
ADD CONSTRAINT CHK_Age
CHECK (DATEDIFF(YEAR, BirthDate, GETDATE()) BETWEEN 18 AND 70)
Проверка формата:
CONSTRAINT CHK_Email CHECK (Email LIKE '%_@__%.__%')
Сложные бизнес-правила:
CONSTRAINT CHK_OrderDates CHECK (
OrderDate <= RequiredDate AND
RequiredDate <= ShippedDate
)
Ограничение по перечислению:
CONSTRAINT CHK_Status CHECK (
Status IN ('New', 'Processing', 'Shipped', 'Completed')
)
NULL-значения:
Производительность:
Ограничения:
-- Временно отключить
ALTER TABLE Products NOCHECK CONSTRAINT CHK_Price
-- Включить обратно
ALTER TABLE Products CHECK CONSTRAINT CHK_Price
CHECK-ограничения — это мощный инструмент обеспечения целостности данных, который должен быть в арсенале каждого SQL-разработчика. Они позволяют реализовывать сложные бизнес-правила непосредственно на уровне базы данных, предотвращая попадание некорректных данных в таблицы. При правильном использовании значительно повышают надежность и качество данных в системе.