Ответ 1
Во-первых, все текущие значения NULL исчезают:
UPDATE [Table] SET [Column]=0 WHERE [Column] IS NULL
Затем обновите определение таблицы, чтобы запретить NULL:
ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
У меня есть таблица с несколькими столбцами с нулевым числом. Это нежелательно по нескольким причинам, поэтому я хочу обновить все значения до 0 и затем установить эти столбцы на NOT NULL
. Помимо изменения нулей в 0
, данные должны быть сохранены.
Я ищу специальный синтаксис SQL для изменения столбца (назовите его ColumnA
) на "NOT NULL
". Предположим, что данные были обновлены, чтобы не содержать нулей.
Использование SQL Server 2000.
Во-первых, все текущие значения NULL исчезают:
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];
Вам придется сделать это в два этапа:
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
Для Oracle 11g я смог изменить атрибут столбца следующим образом:
ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
В противном случае ответ abatichev казался хорошим. Вы не можете повторить изменения - жалуется (по крайней мере, в SQL Developer), что столбец уже не является нулевым.
это сработало для меня:
ALTER TABLE [Table]
Alter COLUMN [Column] VARCHAR(50) not null;
Пока столбец не является уникальным идентификатором
UPDATE table set columnName = 0 where columnName is null
Тогда
Измените таблицу и установите для поля значение не null и укажите значение по умолчанию 0
это кажется более простым, но работает только на 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" нет в столбце таблицы основных ключей. Решение для этого...
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"
Для встроенного javaDB, включенного в JDK (поддерживаемый Oracle дистрибутив Apache Derby), ниже работало для меня
alter table [table name] alter column [column name] not null;
В колонке SSMS также может быть сделан вывод столбца нуль и добавление значения по умолчанию.
UPDATE myTable SET myColumn = 0
Давайте возьмем пример:
TABLE NAME=EMPLOYEE
И я хочу изменить столбец EMPLOYEE_NAME
на NOT NULL
. Этот запрос может быть использован для задачи:
ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
Вы можете изменить определение существующего столбца БД, используя следующий sql.
ALTER TABLE mytable modify mycolumn datatype NOT NULL;