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 nulles ou avoir une définition DEFAULT spécifiée
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 nulles 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 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 votreupdate
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
Sur Enterprise Edition, il s'agit d'un changement de métadonnées uniquement depuis 2012
la source
Le message d'erreur est assez descriptif, essayez:
la source
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 pasNULL
et n'avez pas dedefault
, 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 uneNOT NULL
contrainte après l'avoir remplie avec des non-NULL
valeurs.la source
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.
la source
la source
la source