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不会回收被删除的列占用的空间。对于内联存储在行中的数据类型(例如,int),它甚至可能占用alter语句之后添加的新行上的空间。要解决此问题,您需要在表上创建聚簇索引,或者如果已经有一个聚簇索引,则重建它。修改表后,可以使用REBUILD命令来重建索引。但请注意,这在很大的桌子上可能会很慢。例如:
ALTER TABLE Test
REBUILD;