How to DROP multiple columns with a single ALTER TABLE statement in SQL Server?
我想编写一个SQL命令来从一个
来自MSDN的ALTER TABLE文档......
1 DROP { [CONSTRAINT] constraint_name | COLUMN column_name }Specifies that constraint_name or column_name is removed from the table. DROP COLUMN is not allowed if the compatibility level is 65 or earlier. Multiple columns and constraints can be listed.
它说mutliple列可以在语句中列出,但语法不显示可选的逗号或任何甚至暗示语法的东西。
我应该如何编写SQL以在一个语句中删除多个列(如果可能)?
对于SQL Server:
1 2 | ALTER TABLE TableName DROP COLUMN Column1, Column2 |
语法是
1 | DROP { [ CONSTRAINT ] constraint_name | COLUMN COLUMN } [ ,...n ] |
对于MySQL:
1 2 | ALTER TABLE TableName DROP Column1, DROP Column2 |
总结
甲骨文:
1 | ALTER TABLE TABLE_NAME DROP (column_name1, column_name2); |
MS SQL:
1 | ALTER TABLE TABLE_NAME DROP COLUMN column_name1, column_name2 |
MySQL的:
1 | ALTER TABLE TABLE_NAME DROP column_name1, DROP column_name2; |
Postgre SQL
1 | ALTER TABLE TABLE_NAME DROP COLUMN column_name1, DROP COLUMN column_name2; |
意识到
DROP COLUMN不会为某些DBMS物理删除数据。例如。对于MS SQL。对于固定长度类型(int,numeric,float,datetime,uniqueidentifier等),即使对于删除列后添加的记录,也会占用空间。为了摆脱浪费的空间,请做ALTER TABLE ... REBUILD。
1 2 | 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等),即使对于删除列后添加的记录,也会占用空间。要摆脱浪费的空间,请
这可能会迟到,但会为访问此问题的新用户分享。
要删除多列实际语法是
1 | ALTER TABLE tablename DROP COLUMN col1, DROP COLUMN col2 , DROP COLUMN col3 .... |
因此,对于每个列,您需要在Mysql 5.0.45中指定"drop column"。
Microsoft指定删除ALTER语句的列部分的语法是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | DROP { [ CONSTRAINT ] { constraint_name [ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ] } [ ,...n ] | COLUMN { column_name } [ ,...n ] } [ ,...n ] |
请注意,[,... n]出现在列名称之后和整个drop子句的末尾。这意味着有两种方法可以删除多个列。你可以这样做:
1 2 | ALTER TABLE TableName DROP COLUMN Column1, Column2, Column3 |
或这个
1 2 3 4 5 | ALTER TABLE TableName DROP COLUMN Column1, COLUMN Column2, COLUMN Column3 |
如果要将列的删除与删除约束相结合,则第二种语法很有用:
1 2 3 4 | ALTER TBALE TableName DROP CONSTRAINT DF_TableName_Column1, COLUMN Column1; |
删除列时,SQL Sever不会回收已删除列所占用的空间。对于以行内联存储的数据类型(例如int),它甚至可能占用alter语句后添加的新行的空间。要解决此问题,您需要在表上创建聚簇索引,或者重建聚簇索引(如果已有)。修改表后,可以使用REBUILD命令重建索引。但请注意,在非常大的桌子上这可能会很慢。例如:
1 2 | ALTER TABLE Test REBUILD; |
对于MySQL(版本5.6),您不能使用一个
1 2 3 4 5 6 7 8 9 | 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> |
从上面的
如果只是单列删除下面的语法工作
要删除多个列,使用
通用:
1 2 | ALTER TABLE TABLE_NAME DROP COLUMN column1,column2,column3; |
例如:
1 2 | ALTER TABLE Student DROP COLUMN Name, NUMBER, City; |
1 | ALTER TABLE tablename DROP (column1, column2, column3......); |
1 | ALTER TABLE TABLE_NAME DROP COLUMN column1, DROP COLUMN column2,DROP COLUMN column3; |
对于MySQL DB。
或者您可以在同一行中更改时添加一些列:
1 | ALTER TABLE TABLE_NAME DROP COLUMN column1, ADD COLUMN column2 AFTER column7; |
此查询将改变多列测试它。
1 2 3 | CREATE TABLE test(a INT,B INT,C INT); ALTER TABLE test DROP(a,B); |
尝试以下查询:
1 | ALTER TABLE TABLE_NAME ADD field_name data_type |
要么
1 | ALTER TABLE TABLE_NAME DROP COLUMN field_name |
要么
1 | ALTER TABLE TABLE_NAME DROP field_name |