sql server - nombre - inserte una columna NOT NULL en una tabla existente
como eliminar un campo de una tabla en sql (6)
Como opción, puede crear inicialmente una columna con capacidad nula, luego actualizar la columna de su tabla con valores válidos no nulos y, finalmente, ALTERAR la columna 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 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, necesita usar punto ;
coma ;
como eso:
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;
Yo he tratado:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Pero da este mensaje de error:
ALTER TABLE solo permite añadir columnas que pueden contener nulos o tener una definición DEFAULT especificada
El mensaje de error es bastante descriptivo, prueba:
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT ''-'';
Esto funcionó para mí, también se puede "tomar prestado" de la vista de diseño, hacer cambios -> clic derecho -> generar secuencia de comandos de cambio.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
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 solo de metadatos 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, incluso si no físicamente), que por defecto es NULL
. Si no permite NULL
y no tiene un default
, ¿cuál será el valor?
Dado que SQL Server es compatible con ADD CONSTRAINT
, recomendaría el enfoque de Pavel de crear una columna que pueda contener nulos y luego agregar una restricción NOT NULL
después de haberla completado con valores que no sean NULL
.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;