sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är Check Constraint i SQL Server - SQL Server / TSQL Tutorial Del 82

Vad är kontrollbegränsning:

Check Constraints begränsar de värden som accepteras av en eller flera kolumner.


Låt oss förstå Check Constraint med realtidsscenario.

Du arbetar som SQL Server-utvecklare, Du måste skapa dbo.Kundtabell som ska ha kolumner som FName, LName och Address. Eftersom FName kommer att vara VARCHAR så kan användarna infoga strängvärden som kan innehålla alfabet, numeriska och andra tecken. Du vill skriva en kontrollbegränsning så att FName bara accepterar alfabet.

Lösning:

Låt oss skapa tabellen med Check Constraint genom att använda skriptet nedan

--Create Table with 
use YourDatabaseName
go
Create table dbo.Customer
(
FName VARCHAR(100) Not Null,
LName VARCHAR(100),
StreetAddress VARCHAR(255),
Check (FName not like '%[^a-z]%')
)
 
Låt oss infoga några poster i tabellen och se om vår Check Constraint fungerar som förväntat. Det ska bara tillåta att infoga de poster där FName bara innehåller alfabet.

--insert some sample records
insert into dbo.Customer
(FName,LName,StreetAddress)
Values ('Aamir','Shahzad','xyz address')
go
insert into dbo.Customer
(FName,LName,StreetAddress)
Values ('Aamir4','Shahzad','xyz address')
go
insert into dbo.Customer
(FName,LName,StreetAddress)
Values ('abc3c','Shahzad','xyz address')
go
insert into dbo.Customer
(FName,LName,StreetAddress)
Values ('-tName','Shahzad','xyz address')
 När jag körde ovanstående infogningsskript, nedan är meddelandena jag fick från SQL Server.

(1 rad(er) påverkade)
Msg 547, Level 16, State 0, Line 18
INSERT-satsen kom i konflikt med CHECK-begränsningen "CK__Customer__FName__5FB337D6". Konflikten inträffade i databasen "YourDatabaseName", tabell "dbo.Customer", kolumn "FName".
Utsatsen har avslutats.
Msg 547, Level 16, State 0, Line 22
INSERT-satsen stod i konflikt med CHECK-begränsningen "CK__Customer__FName__5FB337D6". Konflikten inträffade i databasen "YourDatabaseName", tabell "dbo.Customer", kolumn "FName".
Utsatsen har avslutats.
Msg 547, Level 16, State 0, Line 26
INSERT-satsen stod i konflikt med CHECK-begränsningen "CK__Customer__FName__5FB337D6". Konflikten inträffade i databasen "YourDatabaseName", tabell "dbo.Customer", kolumn 'FName'.
Utsatsen har avslutats.

Den infogade bara den allra första posten som innehåller alla alfabet för FName, resten av posterna avvisas av vår kontrollbegränsning eftersom de innehåller andra tecken än alfabet.

Låt oss kontrollera data i tabellen för att se till att endast en enda post har infogats.
Vad är Check Constraint i SQL Server och hur man skapar Check Constraint i SQL Server

Videodemo:Vad är Check Constraint och hur man skapar Check Constraint i SQL Server

  1. Dela sträng efter mellanslag och tecken som avgränsare i Oracle med regexp_substr

  2. Vad betyder Clustered and Non-Clustered index egentligen?

  3. Java SQLData - Casta till användarobjekt med en lista/array?

  4. Hur man begränsar resultat i Oracle