Pregunta Alterar una columna: nulo para no nulo


Tengo una tabla que tiene varias columnas enteras nulables. Esto es indeseable por varias razones, así que estoy buscando actualizar todos los nulos a 0 y luego configurar estas columnas para NOT NULL. Además de cambiar los valores nulos a 0, los datos deben ser preservados.

Estoy buscando el sintaxis SQL específica para alterar una columna (llámala ColumnA) a "not null". Suponga que los datos se han actualizado para no contener nulos.

Utilizando SQL Server 2000.


1023
2018-03-27 13:24


origen


Respuestas:


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

1732
2018-03-27 13:30



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];

47
2018-06-15 20:45



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

29
2018-03-27 13:34



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.


21
2017-09-17 21:13



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


16
2018-03-27 13:26



esto funcionó para mí:

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

15
2018-06-05 13:00



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.


5
2018-03-04 07:55



En caso de FOREIGN KEY CONSTRAINT... habrá un problema si '0' no está presente en la columna de la tabla de claves principales. 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"

2
2017-11-27 17:13