ALTERステートメントの列部分を削除するために Microsoft によって指定された構文は次のとおりです。
DROP
{
[ CONSTRAINT ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN
{
column_name
} [ ,...n ]
} [ ,...n ]
[,...n] が列名の後と drop 句全体の最後にあることに注意してください。これが意味することは、複数の列を削除するには 2 つの方法があるということです。これを行うことができます:
ALTER TABLE TableName
DROP COLUMN Column1, Column2, Column3
またはこれ
ALTER TABLE TableName
DROP
COLUMN Column1,
COLUMN Column2,
COLUMN Column3
この 2 番目の構文は、列の削除と制約の削除を組み合わせたい場合に役立ちます。
ALTER TBALE TableName
DROP
CONSTRAINT DF_TableName_Column1,
COLUMN Column1;
列を削除する場合、SQL Server は、削除された列によって占められていたスペースを再利用しません。行にインラインで格納されるデータ型 (int など) の場合、alter ステートメントの後に追加される新しい行のスペースを占有することさえあります。これを回避するには、テーブルにクラスター化インデックスを作成するか、既にクラスター化インデックスがある場合はクラスター化インデックスを再構築する必要があります。インデックスの再構築は、テーブルの変更後に REBUILD コマンドで実行できます。ただし、これは非常に大きなテーブルでは遅くなる可能性があることに注意してください。例えば:
ALTER TABLE Test
REBUILD;