J'ai essayé:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Mais cela donne ce message d'erreur:
ALTER TABLE autorise uniquement l'ajout de colonnes pouvant contenir des valeurs NULL ou avoir une définition DEFAULT spécifiée
En option, vous pouvez initialement créer une colonne Null -able, puis mettre à jour votre colonne de table avec des valeurs valides et null, et enfin, ALTER column pour définir la contrainte NOT NULL:
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
Une autre option consiste à spécifier la valeur par défaut correcte pour votre colonne:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: Veuillez noter que la réponse ci-dessus contient la variable GO
, indispensable lorsque vous exécutez ce code sur un serveur Microsoft SQL. Si vous voulez effectuer la même opération sur Oracle ou MySQL, vous devez utiliser le point-virgule ;
comme ceci:
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
Si vous n'autorisez pas la colonne à la valeur Null, vous devez fournir une valeur par défaut pour remplir les lignes existantes. par exemple.
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Sous Enterprise Edition, il s'agit d'un changement de métadonnées uniquement depuis 2012
Le message d'erreur est assez descriptif, essayez:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
D'autres implémentations SQL ont des restrictions similaires. La raison en est que l'ajout d'une colonne nécessite l'ajout de valeurs pour cette colonne (logiquement, même si ce n'est pas physiquement), la valeur par défaut étant NULL
. Si vous n'autorisez pas NULL
et n'avez pas de default
, quelle va être la valeur?
Étant donné que SQL Server prend en charge ADD CONSTRAINT
, je recommanderais l'approche de Pavel consistant à créer une colonne nullable, puis à ajouter une contrainte NOT NULL
après l'avoir renseignée avec des valeurs non -NULL
.
Cela a fonctionné pour moi, peut également être "emprunté" à partir de la vue de conception, apportez des modifications -> clic droit -> générer le script de changement.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"