Comment puis-je supprimer plusieurs colonnes avec une seule instruction ALTER TABLE?

Je voudrais écrire une seule commande SQL pour supprimer plusieurs colonnes d’une seule table dans une seule instruction ALTER TABLE .

De la documentation ALTER TABLE de MSDN …

 DROP { [CONSTRAINT] constraint_name | COLUMN column_name } 

Indique 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 répertoriées.

Il dit que plusieurs colonnes peuvent être listées dans l’instruction, mais la syntaxe ne montre pas de virgule optionnelle ou quelque chose qui pourrait même suggérer la syntaxe.

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

 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 

Résumer

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 pour certains SGBD. Par exemple pour MS SQL. Pour les types de longueur fixe (int, numeric, float, datetime, uniqueidentifier, etc.), l’espace est consommé même pour les enregistrements ajoutés après la suppression des colonnes. ALTER TABLE … REBUILD Pour vous débarrasser de l’espace perdu

 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, numeric, float, datetime, uniqueidentifier, etc.), l’espace est consommé même pour les enregistrements ajoutés après la suppression des colonnes. ALTER TABLE ... REBUILD Pour vous débarrasser de l’espace perdu

Cela peut être en retard, mais en le partageant pour les nouveaux utilisateurs qui visitent cette question. Pour supprimer plusieurs colonnes, la syntaxe est la suivante:

 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.

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

  DROP { [ CONSTRAINT ] { constraint_name [ WITH (  [ ,...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 drop. 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 la chute d’une colonne avec la suppression d’une contrainte:

 ALTER TBALE TableName DROP CONSTRAINT DF_TableName_Column1, COLUMN Column1; 

Lors de la suppression de colonnes, SQL Sever 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 cluster sur la table ou reconstruire l’index 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 attention, cela peut être lent sur de très grandes tables. Par exemple:

 ALTER TABLE Test REBUILD; 

Pour MySQL (version 5.6), vous ne pouvez pas effectuer de suppression de plusieurs colonnes avec une seule instruction drop mais plutôt plusieurs 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 est raccourci pour drop column comme vous pouvez le voir à partir de drop c3 ci-dessus.

S’il ne s’agit que d’une seule colonne pour supprimer la syntaxe ci-dessous, cela fonctionne

ALTER TABLE tablename DROP COLUMN column1;

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

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

 alter table tablename drop (column1, column2, column3......); 

Générique:

 ALTER TABLE table_name DROP COLUMN column1,column2,column3; 

Par exemple:

 ALTER TABLE Student DROP COLUMN Name, Number, City; 

cette requête modifiera le test à plusieurs colonnes.

 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; 

pour MySQL DB.

Ou vous pouvez append une colonne en modifiant dans la même ligne:

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

Essayez les requêtes suivantes:

 alter table table_name add field_name data_type 

ou

 alter table table_name drop column field_name 

ou

 alter table table_name drop field_name