Сценарий:
Вие работите като разработчик на 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