将列更改为可为空

484

我想将一个表中的列更改为可为空。我使用了:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

这会在Modify处出现错误。正确的语法是什么?


9
请在未来发布错误信息。 - a'r
2
我已经删除了SQL Server标签,因为它看起来已经变成了一个普遍的自由标签。 - Martin Smith
13个回答

746

假设你之前的问题是关于 SQL Server 的:

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

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


8
我尝试在SSMS中使用“Design”工具来将一列位字段从NOT NULL更改为NULL。我收到了一个错误提示,指出需要删除并重新创建表格。哇!这个ALTER TABLE语法起作用了,而且比删除和重新创建表格以使单独的列可为空要容易得多。 - JohnH
3
@JohnH 大多数使用设计器修改表的尝试都会导致该警告。您可以通过更改 SSMS 中的选项来解决这个问题:https://dev59.com/6XI-5IYBdhLWcg3wNla1 - JLRishe
@JLRishe 值得注意的是,除非有人真正了解设计师在幕后删除/重新创建表的后果,否则不建议删除该警告。这可能会带来潜在的问题。 - undefined

85
在PostgreSQL中,它是这样的:
ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

75

如果这是MySQL语法,那么类型会被省略,正如其他回答中指出的那样。 正确的MySQL语法应该是:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

为了让MySQL用户更加清晰,我在此发布。


49

适用于 Oracle 数据库 10g 用户:

alter table mytable modify(mycolumn null);

如果您尝试其他方法,则会收到“ORA-01735:无效的ALTER TABLE选项”错误。

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;

很酷,你不必指定数据类型,只需使用“null”使其可为空。 - Gabe Halsmer

12

适用于SQL Server或TSQL

ALTER TABLE Complaint.HelplineReturn ALTER COLUMN IsDisposed BIT NULL 

8
尽管我不知道你使用的是哪种关系型数据库管理系统(RDBMS),但你可能需要提供整个列规范,而不仅仅是说你现在想要它可为空。例如,如果当前为 INT NOT NULL,则应发出 ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT 命令。

1
这是一个正确且描述性的答案,因此只是澄清如果未指定 Null | NOT NULL,则该列将可为空。 - Hamid Heydarian

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>

2

Oracle

修改表 Merchant_Pending_Functions,将 [column] 设置为非空。


这个回答是否相对于@IgorS的答案有任何新的内容?SQL_SCRIPT代表什么? - jpeg

2
这取决于您使用的SQL引擎,在Sybase中,您的命令可以正常工作:
ALTER TABLE Merchant_Pending_Functions 
Modify NumberOfLocations NULL;

1

对于HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接