我想将表列更改为可为空。我用过:
ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL
这会在Modify
处出错。什么是正确的语法?
答案 0 :(得分:425)
假设SQL Server
(基于您之前的问题):
ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL
将INT
替换为您的实际数据类型。
答案 1 :(得分:41)
对于Oracle数据库10g用户:
alter table mytable modify(mycolumn null);
当你尝试使用
时,你会得到“ORA-01735:无效的ALTER TABLE选项”ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;
答案 2 :(得分:37)
如果这是MySQL语法,那么类型就会丢失,正如其他一些响应所指出的那样。 正确的MySQL语法应该是:
ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL
在此处发布以明确MySQL用户。
答案 3 :(得分:20)
在PostgresQL中它是:
ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;
答案 4 :(得分:5)
虽然我不知道您使用的是什么RDBMS,但您可能需要提供整个列规范,而不仅仅是说您现在希望它可以为空。例如,如果它当前为INT NOT NULL
,则应发出ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT
。
答案 5 :(得分: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>
答案 6 :(得分:0)
对于HSQLDB:
ALTER TABLE tableName ALTER COLUMN columnName SET NULL;
答案 7 :(得分:0)
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;
这将为您工作。
如果要更改一个非空列以允许为空,则无需包含非空子句。因为默认列不为空。
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;
答案 8 :(得分:0)
这取决于您使用的是哪种SQL引擎,在Sybase中,您的命令可以正常工作:
ALTER TABLE Merchant_Pending_Functions
Modify NumberOfLocations NULL;
答案 9 :(得分:0)
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
答案 10 :(得分:-1)
在Oracle中
ALTER TABLE Merchant_Pending_Functions MODIFY(SQL_SCRIPT NOT NULL);