У меня есть таблица с несколькими столбцами с нулевым числом. Это нежелательно по нескольким причинам, поэтому я хочу обновить все значения до 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
Вам придется сделать это в два этапа:
- Обновите таблицу, чтобы в столбце не было нулей.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
- Измените таблицу, чтобы изменить свойство столбца
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
- Как только это будет сделано, с таблицей в виде дизайна (щелкните правой кнопкой мыши
таблицу и щелкните "дизайн" ), вы можете просто снять флажок "Разрешить"
Нулевые столбцы:
![введите описание изображения здесь]()
- Тем не менее в режиме просмотра с выбранным столбцом вы можете увидеть
Свойства столбца в окне ниже и установите для него по умолчанию значение 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;