Изменение столбца: null в not null

у меня есть таблица с несколькими целочисленными столбцами nullable. Это нежелательно по нескольким причинам, поэтому я хочу обновить все нули до 0, а затем установить эти столбцы в NOT NULL. Помимо изменения нулей на 0, данные должны быть сохранены.

Я ищу специфический синтаксис SQL чтобы изменить столбец (назовите его ColumnA) в "not null". Предположим, что данные были обновлены, чтобы не содержать нулей.

используя SQL server 2000.

11 ответов


во-первых, сделайте все текущие значения NULL исчезают:

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

затем обновите определение таблицы, чтобы запретить нули:

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

У меня была та же проблема, но поле использовалось по умолчанию для null, и теперь я хочу по умолчанию 0. Это потребовало добавления еще одной строки после решения mdb:

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

вам придется сделать это в два шага:

  1. обновите таблицу, чтобы в столбце не было нулей.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. изменить таблицу, чтобы изменить свойства столбца
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL

для Oracle 11g я смог изменить атрибут столбца следующим образом:

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

пока столбец не является уникальным идентификатором

UPDATE table set columnName = 0 where columnName is null

затем

измените таблицу и установите для поля значение non null и укажите значение по умолчанию 0


это сработало для меня:

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

это кажется проще, но работает только на Oracle:

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

кроме того, с помощью этого вы также можете добавлять столбцы, а не просто изменять их. Он обновляет значение по умолчанию (0) в этом примере, если значение было null.


в моем случае у меня были трудности с ответами. В итоге я использовал следующее:

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

изменить VARCHAR(200) в свой тип данных, и при необходимости измените значение по умолчанию.

Если у вас нет значения по умолчанию, у вас будет проблема с этим изменением, так как по умолчанию будет null, создающий конфликт.


в случае FOREIGN KEY CONSTRAINT... будет проблема, если "0" отсутствует в столбце таблицы первичного ключа. Решение для этого есть...

Шаг 1:

отключить все ограничения, используя этот код :

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

Шаг 2:

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

Шаг 3:

включить все ограничения с помощью этого кода:

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

создание столбца не null и добавление по умолчанию также можно сделать в GUI SSMS.

  1. как уже заявили другие, вы не можете установить "not null", пока все существующие данные "не null", например:

UPDATE myTable SET myColumn = 0

  1. как только это будет сделано, с таблицей в представлении дизайна (щелкните правой кнопкой мыши таблица и нажмите "design view"), вы можете просто снять флажок разрешить Nulls столбцы как Итак:

enter image description here

  1. все еще в проектном виде с выбранным столбцом вы можете увидеть Свойства Столбца в окне ниже и установите значение по умолчанию 0 там, а также так:

enter image description here


для встроенного javaDB, включенного в JDK (поддерживаемый Oracle дистрибутив Apache Derby), ниже работало для меня

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