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


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

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

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

11 1051

11 ответов:

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

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

затем обновите определение таблицы, чтобы запретить значения 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;

в остальном ответ абатичева казался хорошим. Вы не можете повторить alter - он жалуется (по крайней мере, в SQL Developer), что столбец уже не 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 и добавление по умолчанию также может быть сделано в графическом интерфейсе SSMS.

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

UPDATE myTable SET myColumn = 0

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

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;