web-dev-qa-db-fra.com

Comment supprimer plusieurs colonnes avec une seule instruction ALTER TABLE dans SQL Server?

J'aimerais écrire une seule commande SQL pour supprimer plusieurs colonnes d'une seule table dans une instruction ALTER TABLE.

De documentation ALTER TABLE de MSDN ...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

Spécifie que nom_contrainte ou nom_colonne est supprimé de la table. DROP COLUMN n'est pas autorisé si le niveau de compatibilité est 65 ou antérieur. Plusieurs colonnes et contraintes peuvent être listées.

Il indique que plusieurs colonnes peuvent être répertoriées dans l'instruction, mais que la syntaxe ne montre pas de virgule facultative ni quoi que ce soit qui indiquerait même la syntaxe.

Comment dois-je écrire mon code SQL pour supprimer plusieurs colonnes dans une instruction (si possible)?

260
Jesse Webb

Pour SQL Server:

alter table TableName
    drop column Column1, Column2

La syntaxe est

DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ] 

Pour MySQL:

alter table TableName
    drop Column1, drop Column2
381
Alex Aza

Résumant

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;

Savoir

DROP COLUMN ne supprime pas physiquement les données de certains SGBD. Par exemple. pour MS SQL. Pour les types de longueur fixe (int, numérique, float, date-heure, identificateur unique, etc.), l'espace est utilisé, même pour les enregistrements ajoutés après la suppression des colonnes. Pour vous débarrasser de l’espace perdu, ALTER TABLE ... RECONSTRUIT.

186
dir
create table test (a int, b int , c int, d int);
alter table test drop column b, d;

Sachez que DROP COLUMN ne supprime pas physiquement les données et que, pour les types de longueur fixe (int, numérique, float, date-heure, identificateur unique, etc.), l'espace est utilisé, même pour les enregistrements ajoutés après la suppression des colonnes. Pour vous débarrasser de l'espace perdu, faites ALTER TABLE ... REBUILD.

39
Remus Rusanu

Cela peut être tard, mais partagez-le pour les nouveaux utilisateurs visitant cette question. Pour supprimer plusieurs colonnes, la syntaxe réelle est

alter table tablename drop column col1, drop column col2 , drop column col3 ....

Donc, pour chaque colonne, vous devez spécifier "drop column" dans Mysql 5.0.45.

12
MANISH ZOPE

La syntaxe spécifiée par Microsoft pour supprimer une partie de colonne d'une instruction ALTER est la suivante:

 DROP 
 {
     [ CONSTRAINT ] 
     { 
          constraint_name 
          [ WITH 
           ( <drop_clustered_constraint_option> [ ,...n ] ) 
          ] 
      } [ ,...n ]
      | COLUMN 
      {
          column_name 
      } [ ,...n ]
 } [ ,...n ]

Notez que le [ ... n] apparaît après le nom de la colonne et à la fin de la clause de suppression complète. Cela signifie qu'il existe deux manières de supprimer plusieurs colonnes. Vous pouvez soit faire ceci:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2, Column3

ou ca

ALTER TABLE TableName
    DROP 
        COLUMN Column1,
        COLUMN Column2,
        COLUMN Column3

Cette deuxième syntaxe est utile si vous souhaitez combiner le déplacement d’une colonne avec l’abandon d’une contrainte:

ALTER TBALE TableName
    DROP
        CONSTRAINT DF_TableName_Column1,
        COLUMN Column1;

Lors de la suppression de colonnes, SQL Server ne récupère pas l'espace occupé par les colonnes supprimées. Pour les types de données stockés en ligne dans les lignes (int, par exemple), il peut même occuper de l'espace sur les nouvelles lignes ajoutées après l'instruction alter. Pour contourner ce problème, vous devez créer un index en cluster sur la table ou reconstruire l'index en cluster s'il en a déjà un. La reconstruction de l'index peut être effectuée avec une commande REBUILD après avoir modifié la table. Mais soyez averti que cela peut être lent sur de très grandes tables. Par exemple:

ALTER TABLE Test
    REBUILD;
4
Martin Brown

Pour MySQL (version 5.6), vous ne pouvez pas supprimer plusieurs colonnes avec une seule instruction drop- mais plutôt avec plusieurs instructions drop-:

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> 

BTW, drop <col_name> est raccourci pour drop column <col_name> comme vous pouvez le voir dans drop c3 ci-dessus.

3
CSY

S'il ne s'agit que d'une colonne, supprimer la syntaxe ci-dessous

ALTER TABLE tablename DROP COLUMN column1;

Pour supprimer plusieurs colonnes, l'utilisation de DROP COLUMN ne fonctionne pas, la syntaxe ci-dessous fonctionne

ALTER TABLE tablename DROP (column1, column2, column3......);

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

Générique:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

E.g:

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

cette requête modifiera le test de plusieurs colonnes.

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;

pour MySQL DB.

Ou vous pouvez ajouter des colonnes en modifiant la même ligne:

ALTER table table_name Drop column column1, ADD column column2 AFTER column7;
0
naveen vaishnav