J'ai déjà une table composée de données. J'ai besoin de modifier la table pour ajouter deux nouvelles colonnes qui ne sont pas nulles. Comment puis-je le faire sans perdre de données existantes?
Voici ce que j'ai essayé (en cliquant avec le bouton droit sur le tableau et en sélectionnant Design):
Ajout de nouvelles colonnes 'EmpFlag' (bit, null), 'CreatedDate' (datetime, null)
Mise à jour de la colonne 'EmpFlag' dans le tableau, pour avoir des valeurs valides. (Je voulais juste travailler sur un champ, donc je n'ai pas mis à jour le champ 'CreatedDate')
Maintenant, cliquez avec le bouton droit sur la table, la conception et la rendre non nulle.
Lorsque j'ai essayé d'enregistrer, ce message d'erreur est apparu:
L'enregistrement des modifications n'est pas autorisé. Les modifications que vous avez apportées nécessitent la suppression et la recréation des tableaux suivants.
Vous venez de définir une valeur par défaut dans les nouvelles colonnes et cela vous permettra de les ajouter.
alter table table_name
add column_name datetime not null
constraint DF_Default_Object_Name default (getdate())
ou celui-ci pour un champ varchar.
alter table table_name
add column_name varchar(10) not null
constraint DF_Default_Object_Name default ('A')
Vous pouvez également supprimer la valeur par défaut si vous n'en avez pas besoin après avoir ajouté la colonne.
alter table table_name
drop constraint DF_Default_Object_Name
Si vous ne souhaitez pas placer de valeur par défaut sur les colonnes, vous pouvez:
L'ajout de nouvelles colonnes NOT NULL avec des valeurs par défaut peut être fait dans l'interface graphique comme ci-dessous. Changer un existant en NOT NULL semble être une autre histoire. J'ai le même message que toi. Une option serait de créer une nouvelle colonne NOT NULL avec une valeur par défaut pour remplacer l'ancienne colonne, puis de copier les anciennes données de colonne dans les nouvelles données de colonne.