我想编写一个SQL命令,在一个ALTER table语句中删除单个表中的多个列。

从MSDN的ALTER TABLE文档…

DROP {[CONSTRAINT] constraint_name | COLUMN column_name} 指定从表中删除constraint_name或column_name。如果兼容级别为65或更早,则不允许使用DROP COLUMN。可以列出多个列和约束。

它说可以在语句中列出多个列,但语法没有显示可选的逗号或任何暗示语法的东西。

我应该如何写我的SQL在一个语句中删除多个列(如果可能的话)?


当前回答

泛型:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

例句:

ALTER TABLE Student 
DROP COLUMN Name, Number, City;

其他回答

总结

Oracle:

ALTER TABLE table_name DROP (column_name1, column_name2);

MS SQL Server:

ALTER TABLE table_name DROP COLUMN column_name1, column_name2

MySQL:

ALTER TABLE table_name DROP column_name1, DROP column_name2;

PostgreSQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

请注意

DROP COLUMN不会物理删除某些DBMS的数据。例如,MS SQL。对于固定长度类型(int, numeric, float, datetime, uniqueidentifier等),即使在删除列后添加的记录也会占用空间。为了消除浪费的空间做ALTER TABLE…重建。

对于SQL Server:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2;

语法是

DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ] 

MySQL:

ALTER TABLE TableName
    DROP COLUMN Column1,
    DROP COLUMN Column2;

或者像这样:

ALTER TABLE TableName
    DROP Column1,
    DROP Column2;

COLUMN这个词是可选的,可以省略,除了RENAME COLUMN(用来区分列重命名操作和RENAME表重命名操作)。更多信息请点击这里。

ALTER table table_name Drop column column1, Drop column column2,Drop column column3;

MySQL数据库。

或者你可以添加一些列,同时改变在同一行:

ALTER table table_name Drop column column1, ADD column column2 AFTER column7;

这可能有点晚了,但分享给新用户访问这个问题。 删除多列的实际语法是

alter table tablename drop column col1, drop column col2 , drop column col3 ....

因此,在Mysql 5.0.45中,你需要为每一列指定“drop column”。

create table test (a int, b int , c int, d int);
alter table test drop column b, d;

注意,DROP COLUMN并不会从物理上删除数据,对于固定长度的类型(int、numeric、float、datetime、uniqueidentifier等),即使在删除列之后添加的记录也会占用空间。为了消除浪费的空间做ALTER TABLE…重建。