Published on

June 27, 2019

Comprendre les contraintes par défaut dans SQL Server

Avez-vous déjà demandé ce qui se passe lorsque vous ajoutez une colonne à une table dans SQL Server et lui attribuez une contrainte par défaut ? La valeur par défaut sera-t-elle attribuée à toutes les lignes existantes ? Combien de traitement est impliqué ? Dans cet article, nous explorerons ces questions et comprendrons le comportement des contraintes par défaut dans SQL Server.

Prenons en compte un scénario où nous avons une table avec environ un million de lignes, composée d’une colonne d’identité et d’une colonne de texte. Nous avons rempli la colonne de texte à partir de la table sys.objects :

CREATE TABLE dbo.TestAddColumn (
    Id int IDENTITY(1,1),
    TextValue sysname
);

INSERT INTO dbo.TestAddColumn(TextValue)
SELECT a.name
FROM sys.objects a, sys.objects b, sys.objects c;

Maintenant, ajoutons une colonne bit nullable à la table et attribuons-lui une valeur par défaut de zéro :

ALTER TABLE dbo.TestAddColumn
ADD NewFlag bit NULL CONSTRAINT DF_TestAddColumn_NewFlag DEFAULT 0;

Si nous regardons la table, nous pouvons voir que la nouvelle colonne contient des valeurs Null. La valeur par défaut que nous avons définie n’a pas été attribuée aux lignes existantes.

Ensuite, supprimons la colonne et la contrainte par défaut :

ALTER TABLE dbo.TestAddColumn
DROP CONSTRAINT DF_TestAddColumn_NewFlag;

ALTER TABLE dbo.TestAddColumn
DROP COLUMN NewFlag;

Maintenant, ajoutons la même colonne à nouveau, mais cette fois-ci nous n’autoriserons pas les valeurs Null :

ALTER TABLE dbo.TestAddColumn
ADD NewFlag bit NOT NULL CONSTRAINT DF_TestAddColumn_NewFlag DEFAULT 0;

Si nous vérifions à nouveau la table, nous pouvons voir que la valeur par défaut a été attribuée. Ce comportement dépend de la nullabilité de la colonne. Une colonne nullable conservera Null comme valeur, tandis qu’une colonne non nullable se verra attribuer la nouvelle valeur par défaut.

Mais que se passe-t-il si vous souhaitez attribuer la valeur par défaut même lorsque la colonne est nullable ? Dans ce cas, vous pouvez utiliser l’instruction WITH VALUES. Supprimons à nouveau la contrainte et la colonne, puis ajoutons-la avec les valeurs :

ALTER TABLE dbo.TestAddColumn
ADD NewFlag bit NULL CONSTRAINT DF_TestAddColumn_NewFlag DEFAULT 0 WITH VALUES;

Maintenant, si nous regardons à nouveau les données, nous pouvons voir que la valeur par défaut a été attribuée même si la colonne est nullable.

Une chose intéressante à noter est l’impact sur les performances lors de l’exécution de ces actions. Dans tous les cas, l’utilisation des ressources mesurée était nulle. L’opération d’ajout de colonne est une opération de métadonnées uniquement, ce qui signifie qu’aucune donnée de la table n’a besoin d’être mise à jour, même lorsque la nouvelle colonne se voit attribuer une valeur. Cette optimisation a été introduite dans SQL Server 2012.

Merci de nous avoir lu ! Nous espérons que cet article vous a aidé à comprendre le comportement des contraintes par défaut dans SQL Server.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.