80 votes

Changer une colonne Nullable en NOT NULL avec une valeur par défaut

Je suis tombé aujourd'hui sur une vieille table avec une colonne de date appelée "Created" qui autorise les valeurs nulles. J'aimerais maintenant modifier cette colonne pour qu'elle soit NOT NULL, et inclure une contrainte pour ajouter une valeur par défaut (getdate()).

Jusqu'à présent, j'ai obtenu le script suivant, qui fonctionne bien à condition que j'aie nettoyé tous les nuls au préalable :

ALTER TABLE dbo.MyTable ALTER COLUMN Created DATETIME NOT NULL 

Existe-t-il un moyen de spécifier également la valeur par défaut dans l'instruction ALTER ?

0 votes

Voulez-vous remplir tous les enregistrements déjà existants avec la date du jour ?

0 votes

Oui, ça suffirait.

99voto

Abe Miessler Points 34869

Je pense que vous devrez le faire en trois déclarations distinctes. J'ai cherché et tout ce que j'ai vu semble indiquer que vous pouvez le faire si vous êtes en ajoutant une colonne, mais pas si vous en modifiez une.

ALTER TABLE dbo.MyTable
ADD CONSTRAINT my_Con DEFAULT GETDATE() for created

UPDATE MyTable SET Created = GetDate() where Created IS NULL

ALTER TABLE dbo.MyTable 
ALTER COLUMN Created DATETIME NOT NULL

15 votes

Est-ce que quelqu'un d'autre a réellement a essayé ça ? J'ai constaté que la deuxième instruction échoue en raison d'une valeur nulle dans la table (malgré la présence d'une valeur par défaut). Vous devez insérer une étape entre les deux où vous nettoyez les valeurs nulles existantes.

4 votes

On dirait que quelqu'un a modifié la réponse. Elle est maintenant correcte et complète.

0 votes

Pourquoi devons-nous ajouter une contrainte à cet endroit ?

13voto

Gage Points 4070

Il se peut que vous deviez d'abord mettre à jour tous les enregistrements qui sont nuls avec la valeur par défaut, puis utiliser l'instruction alter table.

Update dbo.TableName
Set
Created="01/01/2000"
where Created is NULL

7voto

Jinna Balu Points 1246

Vous devez exécuter deux requêtes :

Un - pour ajouter la valeur par défaut à la colonne requise

ALTER TABLE 'Nom_de_la_table' Ajouter la valeur par défaut 'value' pour 'Nom_de_la_colonne'.

Je veux ajouter une valeur par défaut à la colonne IsDeleted comme ci-dessous :

Exemple : ALTER TABLE [dbo].[Employees] ADD Default 0 pour IsDeleted

Deux - pour modifier la valeur de la colonne nullable en not null

ALTER TABLE 'nom_table' ALTER COLUMN 'nom_colonne' 'type_données' NOT NULL

Je veux que la colonne IsDeleted soit non nulle.

ALTER TABLE [dbo].[Employees] Modifier la colonne IsDeleted BIT NOT NULL

3voto

BenW Points 1077

Si c'est SQL Server, vous pouvez le faire sur les propriétés de la colonne dans la vue de conception.

Essayez ceci :

ALTER TABLE dbo.TableName 
  ADD CONSTRAINT DF_TableName_ColumnName
    DEFAULT '01/01/2000' FOR ColumnName

0 votes

Il doit être sous forme de script afin qu'il puisse être exécuté dans le cadre de notre processus de publication automatisé.

0 votes

Toujours pas de dé. La contrainte a été ajoutée, mais la conversion de NULL en NOT NULL est toujours aussi difficile.

0 votes

Script pour mettre à jour tous les nulls pour définir la valeur par défaut puis l'appliquer ? Désolé, je ne suis pas d'une grande aide !

0voto

belal ahmad Points 11

Essayez ceci

ALTER TABLE table_name ALTER COLUMN col_name data_type NOT NULL ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X