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

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

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

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

вопрос задан 27.03.2009
Karmic Coder
8396 репутация

11 ответов


  • 1762 рейтинг

    Сначала, чтобы все текущие значения NULL исчезли:

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

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

    ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
    
    ответ дан mdb, с репутацией 42242, 27.03.2009
  • 48 рейтинг

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

    ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
    
    ответ дан Greg Dougherty, с репутацией 1639, 15.06.2012
  • 31 рейтинг

    Вам нужно будет сделать это в два этапа:

    1. Обновите таблицу, чтобы в столбце не было нулей.
    UPDATE MyTable SET MyNullableColumn = 0
    WHERE MyNullableColumn IS NULL
    
    1. Измените таблицу, чтобы изменить свойство столбца
    ALTER TABLE MyTable
    ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
    
    ответ дан Ralph Wiggum, с репутацией 499, 27.03.2009
  • 21 рейтинг

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

    ALTER TABLE tablename MODIFY columnname datatype NOT NULL;
    

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

    ответ дан JDM, с репутацией 259, 17.09.2012
  • 16 рейтинг

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

    UPDATE table set columnName = 0 where columnName is null
    

    Тогда

    Измените таблицу и задайте для поля значение, не равное NULL, и укажите значение по умолчанию 0

    .
    ответ дан Eppz, с репутацией 2509, 27.03.2009
  • 16 рейтинг

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

    ALTER TABLE [Table] 
    Alter COLUMN [Column] VARCHAR(50) not null;
    
    ответ дан Dheeraj Sam, с репутацией 329, 5.06.2012
  • 5 рейтинг

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

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

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

    ответ дан csomakk, с репутацией 3710, 4.03.2012
  • 3 рейтинг

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

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

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

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

    ответ дан Philip Kirkbride, с репутацией 7435, 26.01.2017
  • 2 рейтинг

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

    ШАГ1:

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

    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)
    

    ШАГ3:

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

    exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
    
    ответ дан sam05, с репутацией 114, 27.11.2014
  • 1 рейтинг

    Сделать столбец не равным NULL и добавить значение по умолчанию также можно сделать в графическом интерфейсе SSMS.

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

    UPDATE myTable SET myColumn = 0

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

    enter image description here

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

    enter image description here

    ответ дан Tony L., с репутацией 8818, 15.12.2015
  • 0 рейтинг

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

    alter table [table name] alter column [column name] not null;
    
    ответ дан trooper31, с репутацией 87, 13.06.2014