Изменение столбца: от нуля до непустого

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

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

Использование SQL Server 2000.

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

В противном случае ответ abatichev казался хорошим. Вы не можете повторить изменения - жалуется (по крайней мере, в SQL Developer), что столбец уже не является нулевым.

Ответ 5

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

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

Ответ 6

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

UPDATE table set columnName = 0 where columnName is null

Тогда

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

Ответ 9

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

STEP1:

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

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

STEP2:

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

STEP3:

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

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

Ответ 10

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

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

Ответ 11

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

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

UPDATE myTable SET myColumn = 0

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

введите описание изображения здесь

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

введите описание изображения здесь

Ответ 12

Давайте возьмем пример:

TABLE NAME=EMPLOYEE

И я хочу изменить столбец EMPLOYEE_NAME на NOT NULL. Этот запрос может быть использован для задачи:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;

Ответ 13

Вы можете изменить определение существующего столбца БД, используя следующий sql.

ALTER TABLE mytable modify mycolumn datatype NOT NULL;