2010-08-24 49 views
197

我想将表列更改为可空。我曾使用过:将列更改为空

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL 

这给出了一个错误Modify。什么是正确的语法?

+6

请后我已经删除了SQL Server的标签在未来 – 2010-08-24 13:58:27

+1

错误消息,因为它看起来像这已经成为一种普遍的全部免费。 – 2016-03-06 14:13:31

回答

329

假设SQL Server(根据你以前的问题):

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL 

替换INT您的实际数据类型。

5

尽管我不知道您使用的是什么RDBMS,但您可能需要提供整个列规范,而不只是说您现在希望它可以为空。例如,如果它目前是INT NOT NULL,则应该发出ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT

+0

这是一个正确的和描述性的答案,所以只需澄清'Null' | NOT NULL没有被指定,该列将是可空的。 – 2017-08-11 06:41:14

4

正如其他人所观察到的,该命令的精确语法随着不同风格的DBMS而变化。语法您在使用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> 
37

对Oracle数据库10g的用户:

alter table mytable modify(mycolumn null); 

你得到 “ORA-01735:无效的ALTER TABLE选项” 当您尝试以其他方式

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL; 
+0

很酷,您不必指定数据类型,只需“null”即可为空。 – 2014-07-08 22:37:52

29

如果这是MySQL语法,那么类型将会丢失,正如其他一些响应指出的那样。 正确的MySQL语法本来:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL 

在这里发帖的清晰度MySQL用户。

7

在PostgreSQL是:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;