sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man skapar kontrollbegränsning på flera kolumner i SQL Server - SQL Server / TSQL självstudie del 84

Scenario:

Du arbetar som SQL Server-utvecklare, du måste skapa dbo.Kundtabell som ska ha kolumner för Förnamn, Ålder och Åldertyp. Du kan lägga till CustomerId som identitet. Du måste skapa kolumner för kontroll av ålder och ålderstyp med logiken nedan


<65 agetype="Adult" and="" p="">
Om det är sant, låt posten infogas eller uppdatera annars misslyckas på grund av kontrollbegränsning.

<65 agetype="Adult" and="" p="">Lösning:

<65 agetype="Adult" and="" p="">Skript nedan kan användas för att lägga till Check Constraint på flera kolumner enligt våra krav.


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'
            )
        )
    )
 
 
Låt oss infoga några poster och försöka se om Check Constraint fungerar som förväntat.


 
--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 rad(er) påverkade)
Msg 547, Level 16, State 0, Line 25
INSERT-satsen stod i konflikt med CHECK-begränsningen "dbo_Customer_AgeAndAgeType". Konflikten inträffade i databasen "YourDatabaseName", tabell "dbo.Customer".
Utsatsen har avslutats.

(1 rad(er) påverkade)
Msg 547, Level 16, tillstånd 0, rad 33
INSERT-satsen stod i konflikt med CHECK-begränsningen "dbo_Customer_AgeAndAgeType". Konflikten inträffade i databasen "YourDatabaseName", tabell "dbo.Customer".
Satsen har avslutats.
Meddelande 547, nivå 16, tillstånd 0, rad 37
INSERT-satsen kom i konflikt med CHECK-begränsningen "dbo_Customer_AgeAndAgeType". Konflikten inträffade i databasen "YourDatabaseName", tabellen "dbo.Customer".
Utsatsen har avslutats.

(1 rad(er) påverkade)

Låt oss kontrollera data i tabellen med hjälp av en sökfråga. Som kan ses nedan är de enda poster infogade som klarade Check Constraint. Resten av posterna kunde inte infogas.
Hur man skapar kontrollbegränsning på flera kolumner i SQL Server-tabellen

Låt oss försöka uppdatera posterna och se om Check Constraint fungerar som förväntat.

update dbo.Customer
set Age=30
where Customerid=1


Det misslyckades med felet nedan eftersom vi inte kan ha Age 30 för AgeType='Child' enligt vår Check Constraint-logik.

Msg 547, Level 16, State 0, Rad 18
UPDATE-satsen kom i konflikt med CHECK-begränsningen "dbo_Customer_AgeAndAgeType". Konflikten inträffade i databasen "YourDatabaseName", tabellen "dbo.Customer".
Utsatsen har avslutats.


Videodemo :Hur man skapar Check Constraint på Flera kolumner i SQL Server

  1. Oracle-certifieringar

  2. Hur anropar man en Oracle-funktion från Hibernate med en returparameter?

  3. Formatera ett tal som valuta i SQLite

  4. PostgreSQL-agent i SQL Standard Committee igen