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;