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

Contrainte SQL DEFAULT pour insérer une colonne avec une valeur par défaut dans la table SQL Server

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