sql >> Databáze >  >> RDS >> Sqlserver

Co je kontrolní omezení v SQL Server - SQL Server / TSQL výukový program, část 82

Co je kontrolní omezení:

Zaškrtněte omezení omezují hodnoty, které jsou přijímány jedním nebo více sloupci.


Pojďme pochopit Check Constraint pomocí scénáře v reálném čase.

Pracujete jako vývojář SQL Serveru, musíte vytvořit tabulku dbo.Customer, která by měla mít sloupce jako FName, LName a Address. Protože FName bude VARCHAR, uživatelé mohou vkládat řetězcové hodnoty, které mohou obsahovat abecedy, číslice a další znaky. Chcete napsat kontrolní omezení, aby FName akceptoval pouze abecedy.

Řešení:

Pojďme vytvořit tabulku s Check Constraint pomocí níže uvedeného skriptu

--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]%')
)
 
Pojďme vložit nějaké záznamy do tabulky a uvidíme, zda naše kontrola omezení funguje podle očekávání. Mělo by to umožnit vložit pouze ty záznamy, ve kterých FName obsahuje pouze abecedy.

--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')
 Když jsem provedl výše uvedené vkládací skripty, níže jsou zprávy, které jsem obdržel ze serveru SQL.

(ovlivněný 1 řádek)
Zpráva 547, úroveň 16, stav 0, řádek 18
Příkaz INSERT byl v konfliktu s omezením CHECK "CK__Customer__FName__5FB337D6". Ke konfliktu došlo v databázi "YourDatabaseName", tabulce "dbo.Customer", sloupci 'FName'.
Příkaz byl ukončen.
Zpráva 547, úroveň 16, stav 0, řádek 22
Příkaz INSERT byl v konfliktu s omezením CHECK "CK__Customer__FName__5FB337D6". Ke konfliktu došlo v databázi "YourDatabaseName", tabulce "dbo.Customer", sloupci 'FName'.
Příkaz byl ukončen.
Zpráva 547, úroveň 16, stav 0, řádek 26
Příkaz INSERT byl v konfliktu s omezením CHECK "CK__Customer__FName__5FB337D6". Ke konfliktu došlo v databázi "YourDatabaseName", tabulce "dbo.Customer", sloupci 'FName'.
Příkaz byl ukončen.

Vložil pouze úplně první záznam, který obsahuje všechny abecedy pro FName, zbytek záznamů je odmítnut naším kontrolním omezením, protože obsahují jiné znaky než abecedy.

Zkontrolujeme data v tabulce, abychom se ujistili, že je vložen pouze jeden záznam.
Co je kontrolní omezení na serveru SQL Server a jak vytvořit kontrolní omezení na serveru SQL

Video ukázka:Co je kontrolní omezení a jak vytvořit kontrolní omezení v SQL Server

  1. Jak začít s Amazon ECS a Amazon Fargate

  2. Udržování pořádku v dotazu MySQL IN

  3. MySQL „vytvořit schéma“ a „vytvořit databázi“ – Existuje nějaký rozdíl?

  4. Ladění výkonu SQLite