将列更改为空

我想改变一个表列为空。我用过:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

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

577904 次浏览

假设SQL Server(基于你之前的问题):

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

用实际的数据类型替换INT

虽然我不知道您使用的是什么RDBMS,但您可能需要给出整个列规范,而不仅仅是说您现在希望它是可空的。例如,如果当前是INT NOT NULL,你应该发出ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT

正如其他人所观察到的,该命令的精确语法在不同类型的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>

Oracle数据库10g用户:

alter table mytable modify(mycolumn null);

当您尝试其他方法时,您将得到“ORA-01735: invalid ALTER TABLE选项”

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;
如果这是MySQL语法,类型就会丢失,就像其他一些响应指出的那样。 正确的MySQL语法应该是:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

为了让MySQL用户更清楚,我在这里发帖。

在PostgresQL中是:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

这对你很有用。

如果要将非空列更改为允许空,则不需要包含非空子句。因为默认列不为空。

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

甲骨文

ALTER TABLE Merchant_Pending_Functions MODIFY([column] NOT NULL);

这取决于你使用的SQL引擎,在Sybase中你的命令可以正常工作:

ALTER TABLE Merchant_Pending_Functions
Modify NumberOfLocations NULL;

SQLite

ALTER TABLE命令有点特殊。不可能修改列。你必须创建一个新列,迁移数据,然后删除该列:

-- 1. First rename
ALTER TABLE
Merchant_Pending_Functions
RENAME COLUMN
NumberOfLocations
TO
NumberOfLocations_old


-- 2. Create new column
ALTER TABLE
Merchant_Pending_Functions
ADD COLUMN
NumberOfLocations INT NULL


-- 3. Migrate data - you need to write code for that
-- 4. Drop the old column
ALTER TABLE
Merchant_Pending_Functions
DROP COLUMN
NumberOfLocations_old

确保您添加了要修改的列的data_type。

ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DATA_TYPE NULL;

适用于SQL Server或TSQL

ALTER TABLE Complaint.HelplineReturn ALTER COLUMN IsDisposed BIT NULL