Ich möchte einen einzelnen SQL-Befehl schreiben, um mehrere Spalten aus einer einzelnen Tabelle in einer ALTER TABLE
-Anweisung zu löschen.
From MSDNs ALTER TABLE-Dokumentation ...
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Gibt an, dass Constraint-Name oder Spaltenname aus der Tabelle entfernt werden. DROP COLUMN ist nicht zulässig, wenn die Kompatibilitätsstufe 65 oder älter ist. Es können mehrere Spalten und Einschränkungen aufgelistet werden.
Es heißt, dass mehrere Spalten in der Anweisung aufgeführt werden können, die Syntax jedoch kein optionales Komma oder irgendetwas anzeigt, das sogar auf die Syntax hindeuten würde.
Wie soll ich mein SQL schreiben, um mehrere Spalten in einer Anweisung abzulegen (falls möglich)?
Für SQL Server:
alter table TableName
drop column Column1, Column2
Die Syntax lautet
DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ]
Für MySQL:
alter table TableName
drop Column1, drop Column2
Oracle :
ALTER TABLE table_name DROP (column_name1, column_name2);
MS SQL :
ALTER TABLE table_name DROP COLUMN column_name1, column_name2
MySql :
ALTER TABLE table_name DROP column_name1, DROP column_name2;
ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;
DROP COLUMN entfernt die Daten für einige DBMS nicht physisch. Z.B. für MS SQL. Für Typen mit fester Länge (int, numerisch, float, datetime, uniqueidentifier usw.) wird der Speicherplatz auch für Datensätze belegt, die nach dem Löschen der Spalten hinzugefügt wurden. ALTER TABLE ... REBUILD, um den verschwendeten Platz zu beseitigen.
create table test (a int, b int , c int, d int);
alter table test drop column b, d;
Beachten Sie, dass DROP COLUMN die Daten nicht physisch entfernt und für Typen mit fester Länge (int, numerisch, float, datetime, uniqueidentifier usw.) der Speicherplatz auch für Datensätze belegt wird, die nach dem Löschen der Spalten hinzugefügt wurden. Um den verschwendeten Speicherplatz zu beseitigen, führen Sie ALTER TABLE ... REBUILD
aus.
Dies kann zu spät sein, aber es für die neuen Benutzer, die diese Frage besuchen, zu teilen. Wenn Sie mehrere Spalten löschen, lautet die tatsächliche Syntax
alter table tablename drop column col1, drop column col2 , drop column col3 ....
Für jede Spalte müssen Sie also "drop column" in MySQL 5.0.45 angeben.
Die von Microsoft angegebene Syntax für das Löschen eines Spaltenteils einer ALTER -Anweisung lautet wie folgt
DROP
{
[ CONSTRAINT ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN
{
column_name
} [ ,...n ]
} [ ,...n ]
Beachten Sie, dass [ ... n] sowohl nach dem Spaltennamen als auch am Ende der gesamten Drop-Klausel angezeigt wird. Dies bedeutet, dass es zwei Möglichkeiten gibt, mehrere Spalten zu löschen. Sie können dies entweder tun:
ALTER TABLE TableName
DROP COLUMN Column1, Column2, Column3
oder dieses
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 möchten:
ALTER TBALE TableName
DROP
CONSTRAINT DF_TableName_Column1,
COLUMN Column1;
Beim Löschen von Spalten gewinnt SQL Server den von den gelöschten Spalten belegten Speicherplatz nicht zurück. Für Datentypen, die in den Zeilen inline gespeichert sind (z. B. int), kann es sogar Platz in den neuen Zeilen beanspruchen, die nach der alter-Anweisung hinzugefügt wurden. Um dies zu umgehen, müssen Sie einen Clustered-Index für die Tabelle erstellen oder den Clustered-Index neu erstellen, falls er bereits über einen verfügt. Nach dem Ändern der Tabelle kann der Index mit dem Befehl REBUILD neu erstellt werden. Aber seien Sie gewarnt, dies kann bei sehr großen Tischen langsam sein. Zum Beispiel:
ALTER TABLE Test
REBUILD;
In MySQL (Version 5.6) können Sie nicht mehrere Spalten mit einer einzelnen drop
- Anweisung löschen, sondern mit mehreren drop
- Anweisungen:
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>
Übrigens steht drop <col_name>
für drop column <col_name>
, wie Sie aus drop c3
oben ersehen können.
Wenn es sich nur um eine einzelne Spalte handelt, funktioniert die folgende Syntax
ALTER TABLE tablename DROP COLUMN column1;
Zum Löschen mehrerer Spalten mit dem DROP COLUMN
funktioniert die folgende Syntax nicht
ALTER TABLE tablename DROP (column1, column2, column3......);
alter table tablename drop (column1, column2, column3......);
generisch:
ALTER TABLE table_name
DROP COLUMN column1,column2,column3;
z. B.
ALTER TABLE Student
DROP COLUMN Name, Number, City;
diese Abfrage ändert den Test für mehrere Spalten.
create table test(a int,B int,C int);
alter table test drop(a,B);
ALTER table table_name Drop column column1, Drop column column2,Drop column column3;
für MySQL DB.
Oder Sie können eine Spalte hinzufügen, während Sie in derselben Zeile Änderungen vornehmen:
ALTER table table_name Drop column column1, ADD column column2 AFTER column7;