如何使用单个ALTER TABLE语句来删除多个列?

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

从MSDN的ALTER TABLE文档 …

 DROP { [CONSTRAINT] constraint_name | COLUMN column_name } 

指定从表中删除constraint_name或column_name。 如果兼容级别为65或更低,则不允许使用DROP COLUMN。 可以列出多个列和约束条件。

它说可以在语句中列出多列,但语法不会显示可选的逗号或任何可以提示语法的东西。

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

 alter table TableName drop column Column1, Column2 

语法是

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

对于MySQL

 alter table TableName drop Column1, drop Column2 

所以总结一下

Oracle :

 ALTER TABLE table_name DROP (column_name1, column_name2); 

MS SQL :

 ALTER TABLE table_name DROP COLUMN column_name1, column_name2 

MySql :

 ALTER TABLE table_name DROP column_name1, DROP column_name2; 

Postgre SQL

 ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2; 
 create table test (a int, b int , c int, d int); alter table test drop column b, d; 

请注意,DROP COLUMN不会实际删除数据,而对于固定长度的types(int,numeric,float,datetime,uniqueidentifier等),即使在删除列后添加的logging也会消耗空间。 摆脱浪费的空间做ALTER TABLE ... REBUILD

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

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

所以对于每一列你需要在Mysql 5.0.45中指定“drop column”。

Microsoft为删除ALTER语句的列部分指定的语法是这样的

  DROP { [ CONSTRAINT ] { constraint_name [ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ] } [ ,...n ] | COLUMN { column_name } [ ,...n ] } [ ,...n ] 

请注意,[,… n]出现在列名称后面和整个drop子句的末尾。 这意味着有两种方法可以删除多个列。 你可以这样做:

 ALTER TABLE TableName DROP COLUMN Column1, Column2, Column3 

或这个

 ALTER TABLE TableName DROP COLUMN Column1, COLUMN Column2, COLUMN Column3 

如果要将列的删除与删除约束组合起来,则此第二种语法非常有用:

 ALTER TBALE TableName DROP CONSTRAINT DF_TableName_Column1, COLUMN Column1; 

删除列时SQL Sever不会回收被删除的列占用的空间。 对于内联存储在行中的数据types(例如int),甚至可能占用alter语句后添加的新行的空间。 为了解决这个问题,你需要在表上创build一个聚集索引,或者重build聚集索引(如果已经有的话)。 修改表后,可以使用REBUILD命令重build索引。 但是要注意的是,在非常大的桌面上这可能会很慢。 例如:

 ALTER TABLE Test REBUILD; 

如果只是单列删除下面的语法工作

ALTER TABLE tablename DROP COLUMN column1;

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

ALTER TABLE tablename DROP (column1, column2, column3......);

对于MySQL(版本5.6),您不能使用一个drop -statement来执行多个列删除,而是使用多个drop -statement:

 mysql> alter table test2 drop column (c1,c2,c3); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(c1,c2,c3)' at line 1 mysql> alter table test2 drop column c1,c2,c3; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'c2,c3' at line 1 mysql> alter table test2 drop column c1, drop column c2, drop c3; Query OK, 0 rows affected (0.64 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> 

顺便说一下, drop <col_name>的缩写drop column <col_name>缩写比例可以从上面的drop c3看到。

 alter table tablename drop (column1, column2, column3......); 

通用:

 ALTER TABLE table_name DROP COLUMN column1,column2,column3; 

例如:

 ALTER TABLE Student DROP COLUMN Name, Number, City; 

这个查询会改变多列testing它。

 create table test(a int,B int,C int); alter table test drop(a,B); 
 ALTER table table_name Drop column column1, Drop column column2,Drop column column3; 

为MySQL DB。

或者你可以添加一些列而改变同一行:

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

尝试以下查询:

 alter table table_name add field_name data_type 

要么

 alter table table_name drop column field_name 

要么

 alter table table_name drop field_name