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 GO
que 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;
update
afirmació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 update
declaración aquí. Por lo general, agregaría solo una columna o dos a la vez. Si agrega una columna adicional a su update
declaración que no pertenece allí, en este ejemplo, entonces tal vez no debería estar a cargo de los datos en primer lugar.
ALTER COLUMN
NO es compatible con SQLite.
GO
antes 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 NULL
y 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 NULL
restricción después de haberla llenado con no NULL
valores.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"