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


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.