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

Comment créer une contrainte unique sur plusieurs colonnes dans SQL Server - Tutoriel SQL Server / TSQL Partie 96

Scénario :

Vous travaillez en tant que développeur SQL Server, il vous est demandé de fournir des scripts de création pour la table dbo.Customer avec une contrainte unique sur les colonnes Prénom et Nom.

Solution :

Comme nous savons que la contrainte unique dans SQL Server est créée sur une ou plusieurs colonnes pour restreindre la ou les colonnes à n'accepter que des valeurs uniques.

Le script ci-dessous peut être utilisé pour créer une contrainte unique sur plusieurs colonnes dans notre cas FirstName et LastName.

USE [YourDatabaseName]GOCREATE TABLE [dbo].[Customer]( [FirstName] [varchar](50) NULL, [LastName] [varchar]( 50) NULL, [SSN] VARCHAR(11), Constraint UQ_Dbo_Customer_FName_LName Unique(FirstName,LastName)) --Insérons quelques exemples de données pour tester Unique Constraint Insert into dbo.Customer(FirstName,LastName,SSN)Values(Null,Null, '000-00-0000'),('Aamir',Nul,'000-00-0000'),(Nul,'Aamir','000-00-0000'),('Aamir','Shahzad', '000-00-0001'),('Raza','M','000-00-0002')
 
 Si vous avez remarqué l'instruction d'insertion, dans le premier enregistrement, j'ai mis les deux valeurs Null pour FirstName et Last Name. Dans le 2ème enregistrement, j'ai utilisé la valeur 'Aamir' pour le prénom et Null pour le nom de famille. Dans le 3ème enregistrement vice versa du 2ème enregistrement. À partir de là, nous comprenons que la contrainte unique fonctionne sur les deux valeurs de colonne. Tant que la valeur combinée des deux colonnes est unique, cela nous permettra d'insérer même l'une d'entre elles est nulle.

Si je souhaite insérer un autre enregistrement dans lequel j'ai Null pour le nom de famille , cela me permettra sans aucun problème, car il est unique parmi les valeurs existantes.

Insérer dans dbo.Customer(FirstName,LastName,SSN)Values('Raza',Null,'000 -00-0000')
 
 
 Vérifions les enregistrements dans la table en utilisant la requête select.
Comment ajouter une contrainte unique sur plusieurs colonnes dans une table SQL Server
Si nous essayons d'insérer un enregistrement en double, nous obtiendrons l'erreur ci-dessous.

Insérer dans dbo.Customer(FirstName,LastName,SSN)Values('Raza',Null,'000-00 -0000')
 
 Msg 2627, Niveau 14, État 1, Ligne 30Violation de la contrainte UNIQUE KEY 'UQ_Dbo_Customer_FName_LName'. Impossible d'insérer la clé en double dans l'objet 'dbo.Customer'. La valeur de clé en double est (Raza, ). L'instruction a été terminée.



Démonstration vidéo :Créer une contrainte unique sur plusieurs colonnes dans SQL Server