Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създадете ограничение за проверка на множество колони в SQL Server - SQL Server / TSQL урок, част 84

Сценарий:

Вие работите като разработчик на SQL Server, трябва да създадете таблица dbo.Customer, която трябва да има колони First Name, Age и Age Type. Можете да добавите CustomerId като идентичност. Трябва да създадете Ограничение за проверка на колони за възраст и тип възраст с по-долу логика


<65 agetype="Adult" and="" p="">
Ако е вярно, оставете записа да се вмъкне или актуализира, в противен случай се провали поради проверка на ограничението.

<65 agetype="Adult" and="" p="">Решение:

<65 agetype="Adult" and="" p="">Скриптът по-долу може да се използва за добавяне на ограничение за проверка на множество колони според нашето изискване.


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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предотвратете запазването на промени, които изискват пресъздаване на таблицата, отрицателни ефекти

  2. RADIANS() Примери в SQL Server

  3. Използвате ли правилните инструменти за наблюдение на производителността на базата данни?

  4. как да получите пълния набор от резултати от SSMS

  5. Запитване на SQL Server:Бързо с буквално, но бавно с променлива