Respuestas:
Como opción, puede crear inicialmente una columna Null-able, luego actualizar la columna de su tabla con valores válidos no nulos y finalmente ALTER column para establecer la restricción 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
Otra opción es especificar el valor predeterminado correcto para su columna:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD: tenga en cuenta que la respuesta anterior contiene lo GOque es imprescindible cuando ejecuta este código en el servidor Microsoft SQL. Si desea realizar la misma operación en Oracle o MySQL, debe usar un punto y coma ;así:
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;
updateafirmación peligrosa que menciona sería perjudicial en cualquier consulta. Debería ser lo suficientemente simple como para ver si tiene una columna adicional en la updatedeclaración aquí. Por lo general, agregaría solo una columna o dos a la vez. Si agrega una columna adicional a su updatedeclaración que no pertenece allí, en este ejemplo, entonces tal vez no debería estar a cargo de los datos en primer lugar.
ALTER COLUMNNO es compatible con SQLite.
GOantes y parece que no forma parte de la especificación SQL , por lo que probablemente provocará fallas en las secuencias de comandos que no se ejecutan con una de las herramientas que lo admiten. ¿Solo usa punto y coma? No recomiendo difundir los estándares de Microsoft, ya que rara vez se preocupan por un estándar establecido y razonable, sino que inventan los suyos solo para que se inventen los suyos propios. Aparte de eso, útil respuesta.
Si no permite que la columna sea nula, debe proporcionar un valor predeterminado para completar las filas existentes. p.ej
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
En Enterprise Edition, este es un cambio de metadatos solo desde 2012
Otras implementaciones de SQL tienen restricciones similares. La razón es que agregar una columna requiere agregar valores para esa columna (lógicamente, aunque no físicamente), que por defecto es NULL. Si no lo permite NULLy no tiene un default, ¿cuál será el valor?
Dado que SQL Server es compatible ADD CONSTRAINT, recomendaría el enfoque de Pavel de crear una columna anulable y luego agregar una NOT NULLrestricción después de haberla llenado con no NULLvalores.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"