Yo he tratado:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Pero da este mensaje de error:
ALTER TABLE solo permite agregar columnas que pueden contener nulos o tener una definición DEFAULT especificada
Yo he tratado:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
Pero da este mensaje de error:
ALTER TABLE solo permite agregar columnas que pueden contener nulos o tener una definición DEFAULT especificada
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 laupdate
declaración aquí. Por lo general, agregaría solo una columna o dos a la vez. Si agrega una columna adicional a suupdate
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
En Enterprise Edition, este es un cambio de metadatos solo desde 2012
fuente
El mensaje de error es bastante descriptivo, intente:
fuente
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 permiteNULL
y no tiene undefault
, ¿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 unaNOT NULL
restricción después de haberla llenado con noNULL
valores.fuente
Esto funcionó para mí, también se puede "tomar prestado" de la vista de diseño, hacer cambios -> clic derecho -> generar script de cambio.
fuente
fuente
fuente