wake-up-neo.com

Wie mehrere Spalten mit einer einzigen ALTER TABLE-Anweisung in SQL Server DROP?

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)?

260
Jesse Webb

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
381
Alex Aza

Zusammenfassend

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;

Postgre SQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

Sei vorsichtig

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.

186
dir
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.

39
Remus Rusanu

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.

12
MANISH ZOPE

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;
4
Martin Brown

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.

3
CSY

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......);

2
kk250040
alter table tablename drop (column1, column2, column3......);
1
Neelima

generisch:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

z. B.

ALTER TABLE Student 
DROP COLUMN Name, Number, City;
1
Chirag Thakar

diese Abfrage ändert den Test für mehrere Spalten.

create table test(a int,B int,C int);

alter table test drop(a,B);
0
Ratan Nahak
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;
0
naveen vaishnav