Alterar una columna: nulo para no nulo

Tengo una tabla que tiene varias columnas enteras nulables. Esto no es deseable por varias razones, por lo que estoy buscando actualizar todas las nulas a 0 y luego establecer estas columnas en NOT NULL . Además de cambiar los valores nulos a 0 , los datos deben conservarse.

Estoy buscando la syntax SQL específica para modificar una columna ( ColumnA ) a ” not null “. Suponga que los datos se han actualizado para no contener nulos.

Usando SQL Server 2000 .

Primero, haz desaparecer todos los valores NULL actuales:

 UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL 

Luego, actualice la definición de la tabla para no permitir NULLs:

 ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL 

Tuve el mismo problema, pero el campo solía ser nulo por defecto, y ahora quiero establecerlo en 0. Esto requirió agregar una línea más después de la solución de mdb:

 ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column]; 

Deberás hacerlo en dos pasos:

  1. Actualice la tabla para que no haya nulos en la columna.
 UPDATE MyTable SET MyNullableColumn = 0 WHERE MyNullableColumn IS NULL 
  1. Altere la tabla para cambiar la propiedad de la columna
 ALTER TABLE MyTable ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL 

Para Oracle 11g, pude cambiar el atributo de columna de la siguiente manera:

 ALTER TABLE tablename MODIFY columnname datatype NOT NULL; 

De lo contrario, la respuesta de Abatichev parecía buena. No puede repetir el alter – se queja (al menos en SQL Developer) de que la columna ya no es nula.

Siempre que la columna no sea un identificador único

 UPDATE table set columnName = 0 where columnName is null 

Entonces

Modifique la tabla y establezca el campo en no nulo y especifique un valor predeterminado de 0

esto funcionó para mí:

 ALTER TABLE [Table] Alter COLUMN [Column] VARCHAR(50) not null; 

esto parece más simple, pero solo funciona en Oracle:

 ALTER TABLE [Table] ALTER [Column] NUMBER DEFAULT 0 NOT NULL; 

Además, con esto, también puede agregar columnas, no solo modificarlas. Se actualiza al valor predeterminado (0) en este ejemplo, si el valor fue nulo.

En el caso de FOREIGN KEY CONSTRAINT … habrá un problema si ‘0’ no está presente en la columna de la tabla de clave principal. La solución para eso es …

PASO 1:

Deshabilite todas las restricciones usando este código:

 EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

PASO 2:

 RUN UPDATE COMMAND (as mentioned in above comments) RUN ALTER COMMAND (as mentioned in above comments) 

PASO 3:

Habilite todas las restricciones usando este código:

 exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 

En mi caso, tuve dificultades con las respuestas publicadas. Terminé usando lo siguiente:

 ALTER TABLE table_name CHANGE COLUMN column_name column_name VARCHAR(200) NOT NULL DEFAULT ''; 

Cambie VARCHAR(200) a su tipo de datos, y opcionalmente cambie el valor predeterminado.

Si no tiene un valor predeterminado, tendrá un problema al realizar este cambio, ya que por defecto sería nulo la creación de un conflicto.

Hacer que la columna no sea nula y agregar valores predeterminados también se puede hacer en la GUI de SSMS.

  1. Como otros ya han indicado, no puede establecer “no nulo” hasta que todos los datos existentes “no sean nulos” como los siguientes:

UPDATE myTable SET myColumn = 0

  1. Una vez hecho esto, con la tabla en la vista de diseño (haga clic con el botón derecho en la tabla y haga clic en “vista de diseño”), simplemente puede desmarcar las columnas Permitir nulos así:

enter image description here

  1. Aún en la vista de diseño con la columna seleccionada, puede ver las Propiedades de la columna en la ventana a continuación y establecer el valor predeterminado en 0, así como así:

enter image description here

Para el javaDB incorporado incluido en el JDK (distribución soportada por Oracle del Apache Derby) el siguiente trabajó para mí

 alter table [table name] alter column [column name] not null;