Изменение столбца, чтобы быть обнуляемым


318

Я хочу изменить столбец таблицы, чтобы быть обнуляемым. Я использовал:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

Это дает ошибку при Modify. Какой правильный синтаксис?


7
Пожалуйста,
опубликуйте

1
Я удалил тег SQL Server, так как похоже, что он стал бесплатным для всех.
Мартин Смит

Ответы:


514

Предполагая SQL Server(на основе ваших предыдущих вопросов):

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

Замените INTна ваш фактический тип данных.


43

для пользователей Oracle Database 10g:

alter table mytable modify(mycolumn null);

Вы получаете «ORA-01735: неверная опция ALTER TABLE», если вы попытаетесь иначе

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;

Круто, вам не нужно указывать тип данных, просто "null", чтобы сделать его обнуляемым.
Гейб Халсмер

41

Если бы это был синтаксис MySQL, этот тип отсутствовал бы, как указывают некоторые другие ответы. Правильный синтаксис MySQL был бы:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

Публикация здесь для ясности пользователям MySQL.



5

Хотя я не знаю, какую СУБД вы используете, вам, вероятно, нужно указать всю спецификацию столбца, а не просто сказать, что вы хотите, чтобы она была обнуляемой. Например, если это в настоящее время INT NOT NULL, вы должны выдать ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT.


Это правильный и описательный ответ, поэтому просто уточнить, если Null| NOT NULLне указан, столбец будет обнуляться.
Хамид Гейдарян

4

Как уже отмечалось, точный синтаксис команды различается в зависимости от типа СУБД. Используемый вами синтаксис работает в Oracle:

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                      NOT NULL VARCHAR2(17)

SQL> alter table MACAddresses
  2       modify corrected_MACAddress null
  3  /

Table altered.

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                               VARCHAR2(17)

SQL>


0
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

Это будет работать для вас.

Если вы хотите изменить ненулевой столбец, чтобы разрешить нулевой, нет необходимости включать не нулевое предложение. Поскольку столбцы по умолчанию становятся не нулевыми.

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

0

Это зависит от того, какой SQL Engine вы используете, в Sybase ваша команда работает нормально:

ALTER TABLE Merchant_Pending_Functions 
Modify NumberOfLocations NULL;

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.