157 votes

insérer une colonne not NULL à une table existante

J'ai essayé:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

Mais il donne ce message d'erreur:

ALTER TABLE permet uniquement les colonnes à ajouter qui peut contenir des valeurs null ou avoir une définition par DÉFAUT spécifié

277voto

Pavel Morshenyuk Points 3679

En option, vous pouvez d'abord créer Null colonne en mesure, ensuite, de mettre à jour votre colonne de table avec le valide pas les valeurs null et enfin MODIFIER la colonne pour définir la contrainte not NULL:

ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE <set valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO

Une autre option est de spécifier la valeur par défaut correcte de votre colonne:

ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'

18voto

Martin Smith Points 174101

Si vous n'êtes pas en permettant à la colonne Nulle, vous devez fournir une valeur par défaut à renseigner les lignes existantes. par exemple

ALTER TABLE dbo.YourTbl ADD
    newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0

5voto

a'r Points 14772

Le message d'erreur est assez descriptif, essayez:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';

4voto

dan04 Points 33306

D'autres implémentations de SQL ont des restrictions similaires. La raison en est que l'ajout d'une colonne requiert l'ajout de valeurs de cette colonne (logiquement, même si pas physiquement), qui par défaut NULL. Si vous ne voulez pas autoriser NULL, et n'ont pas d' default, quelle est la valeur?

Depuis SQL Server prend en charge l' ADD CONSTRAINT, je vous recommande de Pavel approche de la création d'une colonne nullable, puis en ajoutant une NOT NULL contrainte après que vous avez rempli avec des non-NULL valeurs.

0voto

ajoejoseph Points 16
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;

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