Pour insérer des données dans une table ayant des colonnes avec des contraintes par défaut, nous pouvons utiliser la contrainte DEFAULT pour une valeur par défaut dans une table. Cet article couvrira les aspects suivants :
- La contrainte DEFAULT et l'autorisation requise pour les créer.
- Ajout d'une contrainte DEFAULT lors de la création d'une nouvelle table.
- Ajout d'une contrainte DEFAULT dans une table existante.
- Modification et affichage de la définition de contrainte à l'aide de scripts T-SQL et de SSMS.
Qu'est-ce que la CONTRAINTE PAR DÉFAUT dans SQL Server ?
Une contrainte par défaut spécifie la valeur par défaut de la colonne.
Lorsque nous exécutons l'instruction INSERT mais ne spécifions aucune valeur pour la colonne avec la contrainte par défaut créée, SQL Server insère la valeur par défaut spécifiée dans la définition de la contrainte DEFAULT.
Pour créer une contrainte par défaut, vous avez besoin des autorisations ALTER TABLE et CREATE TABLE.
Ajout d'une contrainte DEFAULT lors de la création d'une nouvelle table
Il existe une table nommée SalesDetails . Lorsque nous insérons des données dans le tableau sans spécifier la Sale_Qty valeur de la colonne, la requête doit insérer zéro. Pour ce faire, je crée une contrainte par défaut nommée DF_SalesDetails_SaleQty sur la Sale_Qty colonne.
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0
)
Maintenant, testons le comportement de la contrainte en y insérant des enregistrements factices. Exécutez la requête suivante :
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Utilisez la requête suivante pour afficher les données de la table :
INSERT INTO salesdetails
(product_code)
VALUES ('PROD0001')
Sortie
Comme vous pouvez le voir, le zéro a été inséré dans la Sale_Qty colonne.
Lors de la création d'une table, nous ne spécifions pas le nom de la contrainte DEFAULT. SQL Server crée une contrainte avec un nom unique généré par le système.
Créez le tableau à l'aide de la requête ci-dessous :
USE demodatabase
go
CREATE TABLE salesdetails
(
id INT IDENTITY (1, 1),
product_code VARCHAR(10),
sale_qty INT DEFAULT 0
)
Exécutez le script suivant pour afficher le nom de la contrainte :
SELECT NAME [Constraint name],
parent_object_id [Table Name],
type_desc [Object Type],
definition [Constraint Definition]
FROM sys.default_constraints
Sortie
SQL Server a créé une contrainte avec le nom généré par le système.
Ajout d'une contrainte DEFAULT dans une table existante
Pour ajouter une contrainte sur une colonne existante de la table, on utilise la commande ALTER TABLE ADD CONSTRAINT déclaration :
ALTER TABLE [tbl_name]
ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
Dans la syntaxe,
- tbl_name :spécifiez le nom de la table où vous souhaitez ajouter la contrainte par défaut.
- nom_contrainte :indiquez le nom de la contrainte souhaitée.
- nom_colonne : spécifiez le nom de la colonne dans laquelle vous souhaitez créer la contrainte par défaut.
- default_value : spécifiez la valeur que vous souhaitez insérer - un entier, un caractère ou une chaîne de caractères.
Lorsque nous ne spécifions pas la valeur de la colonne_name dans l'instruction INSERT, elle insère la valeur spécifiée dans la default_value paramètre.
Tout d'abord, ajoutons le Product_name colonne dans SalesDetails :
ALTER TABLE salesdetails
ADD product_name VARCHAR(500)
Nous insérons les données dans la table sans spécifier la valeur de la colonne Product_name. La requête doit insérer N/A .
Pour ce faire, je crée une contrainte par défaut nommée DF_SalesDetails_ProductName sur Product_name colonne. La requête suivante crée une contrainte par défaut :
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name
Maintenant, observons le comportement des contraintes. Insérer un enregistrement sans préciser le nom du produit :
INSERT INTO salesdetails
(product_code,
product_name,
sale_qty)
VALUES ('PROD0002',
'Dell Optiplex 7080',
20)
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0003',
50)
Une fois l'enregistrement inséré, exécutez la requête SELECT pour afficher les données :
USE demodatabase
go
SELECT *
FROM salesdetails
go
Sortie
Comme vous pouvez le voir dans l'image ci-dessus, la valeur de Product_name colonne pour PROD0003 est N/A .
Modification de la contrainte DEFAULT à l'aide de scripts T-SQL
Nous pouvons modifier la définition de la contrainte par défaut :d'abord, supprimez la contrainte existante, puis créez la contrainte avec une définition différente.
Supposons qu'au lieu d'insérer N/A , nous voulons insérer Non Applicable . Tout d'abord, nous devons supprimer le DF_SalesDetails_ProductName contrainte. Exécutez la requête suivante :
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT df_salesdetails_productname
Lorsque la contrainte est supprimée, exécutez la requête pour créer la contrainte :
ALTER TABLE dbo.salesdetails
ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR
product_name
Maintenant, insérons un enregistrement sans préciser le nom du produit :
INSERT INTO salesdetails
(product_code,
sale_qty)
VALUES ('PROD0004',
10)
Exécutez l'instruction SELECT pour afficher les données de SalesDetails tableau :
USE demodatabase
go
SELECT *
FROM salesdetails
go
Sortie
Comme vous pouvez le voir, la valeur de Product_name la colonne n'est pas applicable.
Affichage de la contrainte DEFAULT à l'aide de SSMS
Nous pouvons afficher la liste de la contrainte DEFAULT à l'aide de SQL Server Management Studio et en interrogeant les vues de gestion dynamiques.
Ouvrez SSMS et développez Bases de données > DemoDatabase > Détails des ventes > Contrainte :
Vous pouvez voir les deux contraintes nommées DF_SalesDetails_SaleQty et DF_SalesDetails_ProductName créé.
Une autre façon d'afficher les contraintes en interrogeant sys.default_constraints . La requête suivante renseigne la liste des contraintes par défaut et leurs définitions :
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Sortie
Nous pouvons utiliser le sp_helpconstraint procédure stockée pour visualiser la liste des contraintes créées sur la table :
EXEC Sp_helpconstraint 'SalesDetails'
Sortie
Les constraint_keys la colonne affiche la définition de contrainte par défaut.
Supprimer la contrainte
Nous pouvons supprimer une contrainte de plusieurs manières. Nous pouvons le faire en utilisant l'une des méthodes suivantes :
- Instruction ALTER TABLE DROP CONSTRAINT.
- Instruction DROP DEFAULT.
Supprimer une contrainte à l'aide de la commande ALTER TABLE DROP CONSTRAINT
Pour supprimer la contrainte, nous pouvons utiliser la commande ALTER TABLE DROP CONSTRAINT commande. La syntaxe est la suivante :
Alter table [tbl_name] drop constraint [constraint_name]
Dans la syntaxe,
- tbl_name : spécifiez le nom de la table qui a une colonne avec une contrainte par défaut.
- nom_contrainte : spécifiez le nom de la contrainte que vous souhaitez supprimer.
Supposons que nous voulions supprimer le DF_SalesDetails_SaleQty contrainte de SalesDetails table. Exécutez la requête :
ALTER TABLE dbo.salesdetails
DROP CONSTRAINT [DF_SalesDetails_SaleQty]
Exécutez la requête ci-dessous pour vérifier que la contrainte a été supprimée :
SELECT NAME [Constraint name],
Object_name(parent_object_id)[Table Name],
type_desc [Consrtaint Type],
definition [Constraint Definition]
FROM sys.default_constraints
Sortie
La contrainte a été abandonnée.
Supprimer la contrainte DEFAULT à l'aide de l'instruction DROP DEFAULT
Maintenant, comprenons comment nous pouvons supprimer la contrainte par défaut en utilisant le DROP DEFAULT déclaration. La syntaxe de DROP DEFAULT déclaration est la suivante :
DROP DEFAULT [constraint_name]
- nom_contrainte : spécifiez le nom de la contrainte que vous souhaitez supprimer.
Pour supprimer la contrainte à l'aide de DROP DEFAULT instruction, exécutez la requête suivante :
IF EXISTS (SELECT NAME
FROM sys.objects
WHERE NAME = 'DF_SalesDetails_ProductName'
AND type = 'D')
DROP DEFAULT [DF_SalesDetails_ProductName];
Résumé
Ainsi, nous avons examiné plusieurs aspects essentiels du travail avec les contraintes par défaut. Nous avons appris à créer une contrainte par défaut lors de la création d'un nouveau tableau ou à ajouter une contrainte par défaut sur une colonne existante du tableau.
Nous avons également exploré les cas de modification de la définition de contrainte par défaut, d'affichage des détails des contraintes par défaut à l'aide de différents moyens et de suppression de la contrainte par défaut.
Nous espérons que ces informations et les exemples pratiques que nous avons examinés vous seront utiles dans votre travail.
Lire aussi
SQL INSERT INTO SELECT :5 façons simples de gérer les doublons