sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan oprettes tjekbegrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 84

Scenarie:

Du arbejder som SQL Server-udvikler, du skal oprette dbo. Kundetabel, der skal have kolonnerne Fornavn, Alder og Alderstype. Du kan tilføje CustomerId som identitet. Du skal oprette kontrolbegrænsning på alder og alderstypekolonner med nedenstående logik


<65 agetype="Voksen" og="" p="">
Hvis sandt, så lad posten indsætte eller opdatering ellers mislykkes på grund af Check Constraint.

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

<65 agetype="Adult" and="" p="">Scriptet nedenfor kan bruges til at tilføje Check Constraint på flere kolonner i henhold til vores 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'
            )
        )
    )
 
 
Lad os indsætte et par poster og prøve at se, om Check Constraint fungerer som forventet.


 
--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 række(r) påvirket)
Besked 547, niveau 16, tilstand 0, linje 25
INSERT-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.

(1 række(r) påvirket)
Msg 547, Level 16, tilstand 0, linje 33
INSERT-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.
Besked 547, niveau 16, tilstand 0, linje 37
INSERT-sætningen kom i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Sætningen er blevet afsluttet.

(1 række(r) påvirket)

Lad os tjekke dataene i tabellen ved at bruge valgforespørgsel. Som det kan ses nedenfor, er de eneste poster indsat, som passerede Check Constraint. Resten af ​​posterne kunne ikke indsættes.
Sådan opretter du kontrolbegrænsning på flere kolonner i SQL Server-tabel

Lad os prøve at opdatere posterne og se, om Check Constraint fungerer som forventet.

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


Det mislykkedes med nedenstående fejl, da vi ikke kan have Age 30 for AgeType='Child' ifølge vores Check Constraint-logik.

Msg 547, Level 16, State 0, Linje 18
UPDATE-sætningen var i konflikt med CHECK-begrænsningen "dbo_Customer_AgeAndAgeType". Konflikten opstod i databasen "YourDatabaseName", tabel "dbo.Customer".
Erklæringen er blevet afsluttet.


Videodemo :Sådan opretter du Check Constraint på Flere kolonner i SQL Server

  1. Returnere en forespørgsel fra en funktion?

  2. Arbejde omkring mistede optimeringer

  3. Ydelsesmyter:Overdimensionerede strengsøjler

  4. SQL Server CASE-udtryk