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

从MSDN的ALTER TABLE文档…

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

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

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


当前回答

对于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 tablename drop (column1, column2, column3......);

如果只是单列删除,下面的语法是可行的

删除列:

对于删除多个列,使用DROP COLUMN不起作用,下面的语法可以

DROP (columnn1, column2, column3......);

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…重建。

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

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);

alter table test drop(a,B);