En option, vous pouvez initialement créer une colonne Null-able, puis mettre à jour votre colonne de table avec une valeur non nulle s et enfin ALTER colonne pour définir 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 est de spécifier la valeur par défaut correcte pour votre colonne:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: S'il vous plaît noter que la réponse ci-dessus contient GO
qui est un must 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 virgule ;
comme ça:
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;
Je préfère personnellement la première méthode ici si vous avez des valeurs que vous pouvez mettre manuellement dans le champ. De cette façon, vous n'avez pas à vous soucier de créer et de supprimer une contrainte par défaut dont vous n'avez pas besoin. –
@ MarkWDickson - Le premier semble plus dangereux pour moi. Que se passe-t-il si la colonne incorrecte est glissée dans l'instruction set: UPDATE MY_TABLE SET Employee_Salary = 0 – acarlon
@acarlon - Je pense que c'est en train d'atteindre. La déclaration 'update' 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'instruction 'update' ici. Vous ajouteriez généralement seulement une colonne ou deux à la fois. S'il vous arrive d'ajouter une colonne supplémentaire dans votre instruction 'update' qui n'appartient pas à cet exemple, dans cet exemple, vous ne devriez peut-être pas être en charge des données en premier lieu. –