Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erstellen Sie Check Constraints für mehrere Spalten in SQL Server – SQL Server / TSQL-Tutorial Teil 84

Szenario:

Sie arbeiten als SQL Server-Entwickler und müssen eine dbo.Customer-Tabelle erstellen, die Spalten für Vorname, Alter und Alterstyp enthalten sollte. Sie können CustomerId als Identität hinzufügen. Sie müssen Check Constraint für Alters- und Alterstypspalten mit der folgenden Logik erstellen


<65 agetype="Adult" and="" p="">
Falls wahr, lasse das Einfügen oder Aktualisieren des Datensatzes andernfalls aufgrund von Check Constraint fehlschlagen.

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

<65 agetype="Adult" and="" p="">Das folgende Skript kann verwendet werden, um Check Constraint für mehrere Spalten gemäß unseren Anforderungen hinzuzufügen.


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'
            )
        )
    )
 
 
Lassen Sie uns ein paar Datensätze einfügen und versuchen zu sehen, ob Check Constraint wie erwartet funktioniert.


 
--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 Zeile(n) betroffen)
Meldung 547, Ebene 16, Status 0, Zeile 25
Die INSERT-Anweisung stand in Konflikt mit der CHECK-Einschränkung „dbo_Customer_AgeAndAgeType“. Der Konflikt ist in der Datenbank "YourDatabaseName", Tabelle "dbo.Customer" aufgetreten.
Die Anweisung wurde beendet.

(1 Zeile(n) betroffen)
Msg 547, Level 16, Status 0, Zeile 33
Die INSERT-Anweisung steht in Konflikt mit der CHECK-Einschränkung "dbo_Customer_AgeAndAgeType". Der Konflikt ist in der Datenbank "YourDatabaseName", Tabelle "dbo.Customer" aufgetreten.
Die Anweisung wurde beendet.
Msg 547, Ebene 16, Status 0, Zeile 37
Die INSERT-Anweisung stand in Konflikt die CHECK-Einschränkung "dbo_Customer_AgeAndAgeType". Der Konflikt ist in der Datenbank "YourDatabaseName", Tabelle "dbo.Customer" aufgetreten.
Die Anweisung wurde beendet.

(1 Zeile(n) betroffen)

Lassen Sie uns die Daten in der Tabelle mit der Auswahlabfrage überprüfen. Wie unten zu sehen ist, werden nur Datensätze eingefügt, die die Check Constraint bestanden haben. Die restlichen Datensätze konnten nicht eingefügt werden.
So erstellen Sie Check Constraints für mehrere Spalten in einer SQL Server-Tabelle

Versuchen wir, die Datensätze zu aktualisieren und zu sehen, ob Check Constraint wie erwartet funktioniert.

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


Es ist mit dem folgenden Fehler fehlgeschlagen, da wir gemäß unserer Check-Constraint-Logik kein Alter 30 für AgeType='Child' haben können.

Msg 547, Level 16, State 0, Zeile 18
Die UPDATE-Anweisung stand in Konflikt mit der CHECK-Einschränkung "dbo_Customer_AgeAndAgeType". Der Konflikt ist in der Datenbank "YourDatabaseName", Tabelle "dbo.Customer" aufgetreten.
Die Anweisung wurde beendet.


Video-Demo:So erstellen Sie Check Constraint on Mehrere Spalten in SQL Server