Сценарий:
Вие работите като разработчик на SQL Server, трябва да създадете таблица dbo.Customer, която трябва да има колони First Name, Age и Age Type. Можете да добавите CustomerId като идентичност. Трябва да създадете Ограничение за проверка на колони за възраст и тип възраст с по-долу логика
<65 agetype="Adult" and="" p="">
Ако е вярно, оставете записа да се вмъкне или актуализира, в противен случай се провали поради проверка на ограничението.
65>
<65 agetype="Adult" and="" p="">Решение:65>
<65 agetype="Adult" and="" p="">Скриптът по-долу може да се използва за добавяне на ограничение за проверка на множество колони според нашето изискване.65>
CREATE TABLE dbo.Customer (
CustomerId INT identity(1, 1)
,NAME VARCHAR(100)
,Age INT
,AgeType VARCHAR(15)
,CONSTRAINT dbo_Customer_AgeAndAgeType CHECK (
(
Age <= 17
AND AgeType = 'Child'
)
OR (
Age > 17
AND Age < 65
AND AgeType = 'Adult'
)
OR (
Age >= 65
AND AgeType = 'Senior'
)
)
) Нека вмъкнем няколко записа и се опитаме да видим дали Check Constraint работи според очакванията.
--Correct values accrording to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Najaf',13,'Child')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Leena',14,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Raza',30,'Adult')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Aamir',30,'Senior')
go
--Wrong values according to Check Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('John',65,'Adult')
go
--Correct values accroding to Constraint
insert into dbo.Customer(Name,Age,AgeType)
Values('Kris',65,'Senior')
go (1 ред(а) засегнати)
Съобщение 547, ниво 16, състояние 0, ред 25
Изразът INSERT е в конфликт с ограничението CHECK "dbo_Customer_AgeAndAgeType". Конфликтът възникна в базата данни "YourDatabaseName", таблица "dbo.Customer".
Изявлението е прекратено.
(1 ред(а) засегнати)
Съобщение 547, ниво 16, състояние 0, ред 33
Изразът INSERT е в конфликт с ограничението CHECK "dbo_Customer_AgeAndAgeType". Конфликтът е възникнал в базата данни "YourDatabaseName", таблица "dbo.Customer".
Изявлението е прекратено.
Съобщение 547, ниво 16, състояние 0, ред 37
Изявлението INSERT е в конфликт с ограничението CHECK "dbo_Customer_AgeAndAgeType". Конфликтът възникна в базата данни "YourDatabaseName", таблица "dbo.Customer".
Изявлението е прекратено.
(1 ред(а) засегнати)
Нека проверим данните в таблицата с помощта на заявка за избор. Както може да се види по-долу, единствените записи са вмъкнати, които са преминали проверката на ограничението. Останалите записи не можаха да бъдат вмъкнати.
![]() |
| Как да създадете ограничение за проверка на множество колони в таблица на SQL Server |
Нека се опитаме да актуализираме записите и да видим дали Check Constraint работи според очакванията.
update dbo.Customer set Age=30 where Customerid=1
Неуспешно с грешка по-долу, тъй като не можем да имаме възраст 30 за AgeType='Child' според нашата логика на проверката на ограниченията.
Съобщение 547, ниво 16, състояние 0, Ред 18
Изразът UPDATE е в конфликт с ограничението CHECK "dbo_Customer_AgeAndAgeType". Конфликтът е възникнал в базата данни "YourDatabaseName", таблица "dbo.Customer".
Изявлението е прекратено.
Видео демонстрация:Как да създадете ограничение за проверка на Множество колони в SQL Server
