Изменение столбца: 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];
вам придется сделать это в два шага:
- обновите таблицу, чтобы в столбце не было нулей.
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;
пока столбец не является уникальным идентификатором
UPDATE table set columnName = 0 where columnName is null
затем
измените таблицу и установите для поля значение non 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" отсутствует в столбце таблицы первичного ключа. Решение для этого есть...
Шаг 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.
- как уже заявили другие, вы не можете установить "not null", пока все существующие данные "не null", например:
UPDATE myTable SET myColumn = 0
- как только это будет сделано, с таблицей в представлении дизайна (щелкните правой кнопкой мыши таблица и нажмите "design view"), вы можете просто снять флажок разрешить Nulls столбцы как Итак:
- все еще в проектном виде с выбранным столбцом вы можете увидеть Свойства Столбца в окне ниже и установите значение по умолчанию 0 там, а также так:
для встроенного javaDB, включенного в JDK (поддерживаемый Oracle дистрибутив Apache Derby), ниже работало для меня
alter table [table name] alter column [column name] not null;