我想编写一个SQL命令,在一个ALTER table语句中删除单个表中的多个列。
从MSDN的ALTER TABLE文档…
DROP {[CONSTRAINT] constraint_name | COLUMN column_name}
指定从表中删除constraint_name或column_name。如果兼容级别为65或更早,则不允许使用DROP COLUMN。可以列出多个列和约束。
它说可以在语句中列出多个列,但语法没有显示可选的逗号或任何暗示语法的东西。
我应该如何写我的SQL在一个语句中删除多个列(如果可能的话)?
总结
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…重建。
对于MySQL(5.6版本),你不能用一个drop-statement来执行多个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中看到的那样。
对于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表重命名操作)。更多信息请点击这里。