Изменение столбца: от нуля до нуля - PullRequest
1147 голосов
/ 27 марта 2009

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

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

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

Ответы [ 13 ]

1908 голосов
/ 27 марта 2009

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

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

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

ALTER TABLE [Table] ALTER COLUMN [Column] INTEGER NOT NULL
52 голосов
/ 16 июня 2012

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

ALTER TABLE [Table] ADD CONSTRAINT [Constraint] DEFAULT 0 FOR [Column];
35 голосов
/ 27 марта 2009

Вам придется сделать это в два этапа:

  1. Обновите таблицу, чтобы в столбце не было нулей.
UPDATE MyTable SET MyNullableColumn = 0
WHERE MyNullableColumn IS NULL
  1. Измените таблицу, чтобы изменить свойство столбца
ALTER TABLE MyTable
ALTER COLUMN MyNullableColumn MyNullableColumnDatatype NOT NULL
25 голосов
/ 18 сентября 2012

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

ALTER TABLE tablename MODIFY columnname datatype NOT NULL;

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

17 голосов
/ 05 июня 2012

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

ALTER TABLE [Table] 
Alter COLUMN [Column] VARCHAR(50) not null;
16 голосов
/ 27 марта 2009

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

UPDATE table set columnName = 0 where columnName is null

Тогда

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

.
5 голосов
/ 04 марта 2012

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

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

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

3 голосов
/ 26 января 2017

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

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

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

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

2 голосов
/ 27 ноября 2014

В случае 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"
0 голосов
/ 26 апреля 2019

Давайте рассмотрим пример:

TABLE NAME=EMPLOYEE

И я хочу изменить столбец EMPLOYEE_NAME на NOT NULL. Этот запрос можно использовать для задачи:

ALTER TABLE EMPLOYEE MODIFY EMPLOYEE.EMPLOYEE_NAME datatype NOT NULL;
...