Ajouter des colonnes non-nulles à une table existante dans SQL server?

j'ai déjà un tableau qui se compose de données. Je dois modifier la table pour ajouter deux nouvelles colonnes qui ne sont pas nulles. Comment puis-je faire cela sans perdre des données existantes?


voici ce que j'ai essayé (en cliquant avec le bouton droit de la souris sur la table et en sélectionnant le Design):

  1. ajout de nouvelles colonnes "EmpFlag" (bit, null), "CreatedDate" (datetime, null)

  2. mise à Jour 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')

  3. maintenant à droite cliqué table, design, et fait pas null.

quand j'ai essayé de sauvegarder, ce message d'erreur est apparu:

Les modifications de sauvegarde

ne sont pas autorisées. les modifications que vous avez apportées exigent les tableaux suivants être abandonné et recréé .

43
demandé sur Tony L. 2010-02-15 22:52:24

3 réponses

que Vous venez de définir une valeur par défaut dans les nouvelles colonnes et qui 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
62
répondu Jose Chama 2010-02-15 20:14:59

Si vous ne voulez placer un défaut sur les colonnes, vous pouvez:

  1. créer les nouvelles colonnes comme NULLable
  2. mettre à jour les données existantes de manière appropriée
  3. ajouter la contrainte non nulle
21
répondu Aaron Bertrand 2010-02-15 19:55:59

ajouter de nouvelles colonnes non nulles avec des valeurs par défaut peut être fait dans l'interface graphique comme ci-dessous. Changer un existant en non NULL semble être une histoire différente. Je reçois le même message que vous. Une option serait de créer une nouvelle colonne not NULL par défaut est de remplacer l'ancienne colonne, puis copier l'ancienne colonne de données à la nouvelle colonne de données.

  1. placer la table en mode Création (clic droit sur la table- > sélectionner création )
  2. ajouter colonne, sélectionner le type de données
  3. Décocher la case Autoriser les valeurs Null et mettre Valeur par Défaut ou de Liaison = vos valeurs par défaut comme ci-dessous

enter image description here

1
répondu Tony L. 2017-07-11 18:58:19