Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Qu'est-ce que la contrainte de vérification dans SQL Server - Tutoriel SQL Server / TSQL, partie 82

Qu'est-ce qu'une contrainte de vérification :

Les contraintes de vérification limitent les valeurs acceptées par une ou plusieurs colonnes.


Comprenons la contrainte de vérification avec un scénario en temps réel.

Vous travaillez en tant que développeur SQL Server, vous devez créer une table dbo.Customer qui doit contenir des colonnes telles que FName, LName et Address. Comme FName va être VARCHAR, les utilisateurs peuvent insérer des valeurs de chaîne pouvant contenir des caractères alphabétiques, numériques et autres. Vous souhaitez écrire une contrainte de vérification afin que FName n'accepte que les alphabets.

Solution :

Créons la table avec Check Constraint en utilisant le script ci-dessous

--Create Table with use YourDatabaseNamegoCreate table dbo.Customer(FName VARCHAR(100) Not Null,LName VARCHAR(100),StreetAddress VARCHAR (255),Vérifiez (FName n'est pas comme '%[^a-z]%'))
 
Insérons quelques enregistrements dans le tableau et voyons si notre vérification de contrainte fonctionne comme prévu. Il ne devrait permettre d'insérer que les enregistrements dans lesquels FName ne contient que des alphabets.

--insert some sample recordsinsert into dbo.Customer(FName,LName,StreetAddress)Values ​​('Aamir','Shahzad ','adresse xyz')goinsert into dbo.Customer(FName,LName,StreetAddress)Values ​​('Aamir4','Shahzad','xyz address')goinsert into dbo.Customer(FName,LName,StreetAddress)Values ​​('abc3c ','Shahzad','xyz address')goinsert into dbo.Customer(FName,LName,StreetAddress)Values ​​('-tName','Shahzad','xyz address')
 Lorsque j'ai exécuté les scripts d'insertion ci-dessus, voici les messages que j'ai reçus de SQL Server.

(1 ligne(s) affectée(s))
Msg 547, Niveau 16, État 0, Ligne 18
L'instruction INSERT est en conflit avec la contrainte CHECK "CK__Customer__FName__5FB337D6". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer", colonne 'FName'.
L'instruction a été terminée.
Msg 547, Level 16, State 0, Line 22
L'instruction INSERT était en conflit avec la contrainte CHECK "CK__Customer__FName__5FB337D6". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer", colonne 'FName'.
L'instruction a été terminée.
Msg 547, Niveau 16, État 0, Ligne 26
L'instruction INSERT était en conflit avec la contrainte CHECK "CK__Customer__FName__5FB337D6". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer", colonne 'FName'.
L'instruction a été terminée.

Il n'a inséré que le tout premier enregistrement contenant tous les alphabets pour FName, le reste des enregistrements est rejeté par notre contrainte de vérification car ils contiennent d'autres caractères que des alphabets.

Vérifions les données dans le tableau pour nous assurer qu'un seul enregistrement est inséré.
Qu'est-ce qu'une contrainte de vérification dans SQL Server et comment créer une contrainte de vérification dans SQL Server

Démo vidéo :Qu'est-ce qu'une contrainte de vérification et comment créer une contrainte de vérification dans SQL Server