web-dev-qa-db-fra.com

Ajouter des colonnes non nullables à une table existante dans SQL Server?

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):

  1. Ajout de nouvelles colonnes 'EmpFlag' (bit, null), 'CreatedDate' (datetime, null)

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

  3. 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.

46
sanjeev40084

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
68
Jose Chama

Si vous ne souhaitez pas placer de valeur par 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 NOT NULL
25
Aaron Bertrand

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.

  1. Mettre le tableau en mode Design (clic droit sur le tableau-> sélectionner Design )
  2. Ajouter une colonne, sélectionner le type de données
  3. Décochez Autoriser les valeurs nulles et définissez Valeur par défaut ou liaison = vos valeurs par défaut comme au dessous de

enter image description here

1
Tony L.