Изменение столбца: null в not null
у меня есть таблица, которая имеет несколько нулевых целых столбцов. Это нежелательно по нескольким причинам, поэтому я хочу обновить все нули до 0, а затем установить эти столбцы в NOT NULL
. Помимо изменения нулей на 0
, данные должны быть сохранены.
Я ищу специфический синтаксис SQL чтобы изменить столбец (назовите его ColumnA
) в "not null
". Предположим, что данные были обновлены, чтобы не содержать нулей.
используя SQL server 2000.
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];
вам придется сделать это в два шага:
- обновите таблицу, чтобы в столбце не было нулей.
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;
в остальном ответ абатичева казался хорошим. Вы не можете повторить alter - он жалуется (по крайней мере, в SQL Developer), что столбец уже не 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 и добавление по умолчанию также может быть сделано в графическом интерфейсе SSMS.
- как уже говорили другие, вы не можете установить "not null", пока все существующие данные "не null", как так:
UPDATE myTable SET myColumn = 0
- как только это будет сделано, с таблицей в режиме конструктора (щелкните правой кнопкой мыши таблица и нажмите "вид дизайна"), вы можете просто снять флажок разрешить Значения столбцы как Итак:
- все еще в режиме конструктора с выбранным столбцом, вы можете увидеть Свойства Столбца в окне ниже и установить по умолчанию 0 там, а также так: