Réponses:
En option, vous pouvez initialement créer une colonne Null-able, puis mettre à jour votre colonne de table avec des valeurs non nulles valides 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 GO
ce qui est indispensable lorsque vous exécutez ce code sur un serveur Microsoft SQL. Si vous souhaitez effectuer la même opération sur Oracle ou MySQL, vous devez utiliser un point-virgule ;
comme celui-ci:
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;
update
déclaration dangereuse que vous mentionnez serait préjudiciable dans toute requête. Cela devrait être assez simple pour voir si vous avez une colonne supplémentaire dans l' update
instruction ici. Vous n'ajouteriez généralement qu'une ou deux colonnes à la fois. S'il vous arrive d'ajouter une colonne supplémentaire dans votre update
déclaration qui n'y appartient pas, dans cet exemple, vous ne devriez peut-être pas être en charge des données en premier lieu.
ALTER COLUMN
n'est PAS pris en charge dans SQLite.
GO
auparavant et cela ne semble pas faire partie de la spécification SQL , donc cela entraînera probablement un échec pour les scripts non exécutés par l'un des outils qui le prennent en charge. Utilisez simplement des points-virgules? Je ne recommande pas de diffuser les normes Microsoft car ils se soucient rarement de toute norme établie et raisonnable, mais inventent les leurs juste pour se faire inventer eux-mêmes. En dehors de cela, réponse utile.
Si vous n'autorisez pas la colonne à être 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
Sur Enterprise Edition, il s'agit d'un changement de métadonnées uniquement depuis 2012
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), qui par défaut sont NULL
. Si vous n'autorisez pas NULL
et n'avez pas de default
, quelle sera la valeur?
Étant donné que SQL Server prend en charge ADD CONSTRAINT
, je recommande l'approche de Pavel consistant à créer une colonne Nullable, puis à ajouter une NOT NULL
contrainte après l'avoir remplie avec des non- NULL
valeurs.
Cela a fonctionné pour moi, peut également être "emprunté" à la vue de conception, apporter des modifications -> clic droit -> générer un script de modification.
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"