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

Comment créer une contrainte de vérification sur plusieurs colonnes dans SQL Server - Tutoriel SQL Server / TSQL Partie 84

Scénario :

Vous travaillez en tant que développeur SQL Server, vous devez créer une table dbo.Customer qui doit contenir les colonnes First Name, Age et Age Type. Vous pouvez ajouter CustomerId comme identité. Vous devez créer une contrainte de vérification sur les colonnes d'âge et de type d'âge avec la logique ci-dessous


<65 agetype="Adulte" and="" p="">
Si vrai, laissez l'insertion ou la mise à jour de l'enregistrement échouer en raison de la contrainte de vérification.

<65 agetype="Adult" and="" p="">Solution :

<65 agetype="Adult" and="" p="">Le script ci-dessous peut être utilisé pour ajouter une contrainte de vérification sur plusieurs colonnes selon nos besoins.


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 =' Enfant' ) OU ( Age> 17 AND Age <65 AND AgeType ='Adult' ) OR ( Age>=65 AND AgeType ='Senior' ) ) )
 
 
Insérons quelques enregistrements et essayons de voir si Check Constraint fonctionne comme prévu.


 
--Valeurs correctes selon Constraintinsert into dbo.Customer(Name,Age,AgeType)Values('Najaf',13,'Child')go--Mauvaises valeurs selon Check Constraintinsert into dbo.Customer(Name,Age ,AgeType)Values('Leena',14,'Adult')go--Valeurs correctes selon la contrainte à insérer dans dbo.Customer(Name,Age,AgeType)Values('Raza',30,'Adult')go--Wrong valeurs selon Check Constraintinsert into dbo.Customer(Name,Age,AgeType)Values('Aamir',30,'Senior')go--Mauvaises valeurs selon Check Constraintinsert into dbo.Customer(Name,Age,AgeType)Values( 'John',65,'Adult')go--Valeurs correctes selon Constraintinsert into dbo.Customer(Name,Age,AgeType)Values('Kris',65,'Senior')go


(1 ligne(s) affectée(s))
Msg 547, Niveau 16, État 0, Ligne 25
L'instruction INSERT est en conflit avec la contrainte CHECK "dbo_Customer_AgeAndAgeType". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer".
La déclaration a été terminée.

(1 ligne(s) affectée(s))
Msg 547, Level 16, état 0, ligne 33
L'instruction INSERT est en conflit avec la contrainte CHECK "dbo_Customer_AgeAndAgeType". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer".
L'instruction a été terminée.
Msg 547, Level 16, State 0, Line 37
L'instruction INSERT est en conflit avec la contrainte CHECK "dbo_Customer_AgeAndAgeType". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer".
La déclaration a été terminée.

(1 ligne(s) affectée(s))

Vérifions les données dans la table en utilisant la requête select. Comme on peut le voir ci-dessous, seuls les enregistrements insérés ont passé la contrainte de vérification. Le reste des enregistrements n'a pas pu être inséré.
Comment créer une contrainte de vérification sur plusieurs colonnes dans une table SQL Server

Essayons de mettre à jour les enregistrements et de voir si Check Constraint fonctionne comme prévu.

update dbo.Customerset Age=30where Customerid=1


Cela a échoué avec l'erreur ci-dessous car nous ne pouvons pas avoir Age 30 pour AgeType='Child' selon notre logique de vérification de contrainte.

Msg 547, Niveau 16, État 0, Ligne 18
L'instruction UPDATE est en conflit avec la contrainte CHECK "dbo_Customer_AgeAndAgeType". Le conflit s'est produit dans la base de données "YourDatabaseName", table "dbo.Customer".
La déclaration a été terminée.


Démo vidéo :comment créer une contrainte de vérification sur Plusieurs colonnes dans SQL Server