Die von Microsoft spezifizierte Syntax für das Fallenlassen einer Spalte in einem ALTER Aussage ist diese
DROP
{
[ CONSTRAINT ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN
{
column_name
} [ ,...n ]
} [ ,...n ]
Beachten Sie, dass das [,...n] sowohl nach dem Spaltennamen als auch am Ende der gesamten Drop-Klausel erscheint. Das bedeutet, dass es zwei Möglichkeiten gibt, mehrere Spalten zu löschen. Sie können entweder so vorgehen:
ALTER TABLE TableName
DROP COLUMN Column1, Column2, Column3
oder dies
ALTER TABLE TableName
DROP
COLUMN Column1,
COLUMN Column2,
COLUMN Column3
Diese zweite Syntax ist nützlich, wenn Sie das Löschen einer Spalte mit dem Löschen einer Einschränkung kombinieren wollen:
ALTER TBALE TableName
DROP
CONSTRAINT DF_TableName_Column1,
COLUMN Column1;
Wenn Spalten gelöscht werden, nimmt SQL Sever den von den gelöschten Spalten belegten Platz nicht wieder ein. Bei Datentypen, die inline in den Zeilen gespeichert werden (z. B. int), kann es sogar dazu kommen, dass die neuen Zeilen, die nach der alter-Anweisung hinzugefügt werden, Platz benötigen. Um dies zu umgehen, müssen Sie einen geclusterten Index auf der Tabelle erstellen oder den geclusterten Index neu aufbauen, wenn er bereits einen hat. Die Wiederherstellung des Indexes kann mit einem REBUILD-Befehl nach der Änderung der Tabelle erfolgen. Aber seien Sie gewarnt, dass dies bei sehr großen Tabellen sehr langsam sein kann. Zum Beispiel:
ALTER TABLE Test
REBUILD;