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)?
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
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 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.
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
.
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.
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;
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.
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......);
alter table tablename drop (column1, column2, column3......);
Générique:
ALTER TABLE table_name
DROP COLUMN column1,column2,column3;
E.g:
ALTER TABLE Student
DROP COLUMN Name, Number, City;
cette requête modifiera le test de 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 ajouter des colonnes en modifiant la même ligne:
ALTER table table_name Drop column column1, ADD column column2 AFTER column7;