Как удалить несколько столбцов с помощью одной инструкции ALTER TABLE в SQL Server?

Я хотел бы написать одну команду SQL, чтобы удалить несколько столбцов из одной таблицы в один ALTER TABLE заявление.

С документация ALTER TABLE MSDN...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

указывает, что constraint_name или column_name удаляется из таблицы. Столбец не допускается, если уровень совместимости 65 и выше. Можно перечислить несколько столбцов и ограничений.

Он говорит, что столбцы mutliple могут быть перечислены в инструкции the, но синтаксис не показывает необязательную запятую или что-либо, что даже намекает на синтаксис.

Как написать SQL, чтобы удалить несколько столбцов в одном операторе (если это возможно)?

12 ответов


для SQL Server:

alter table TableName
    drop column Column1, Column2

синтаксис

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

Для 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;

Postgre SQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

помните

столбец DROP физически не удаляет данные для некоторых СУБД. Е. Г. для MS SQL-кода. Для типов фиксированной длины (int, numeric, float, datetime, uniqueidentifier и т. д.) пространство используется даже для записей, добавленных после столбцов были сброшены. Чтобы избавиться от пустого места, сделайте ALTER TABLE ... ВОССТАНОВИТЬ.


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

имейте в виду, что столбец DROP физически не удаляет данные, а для типов фиксированной длины (int, numeric, float, datetime, uniqueidentifier и т. д.) пространство используется даже для записей, добавленных после удаления столбцов. Чтобы избавиться от пустого пространства do ALTER TABLE ... REBUILD.


Это может быть поздно, но поделиться им для новых пользователей, посещающих этот вопрос. Чтобы удалить несколько столбцов, фактический синтаксис

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

поэтому для каждого столбца вам нужно указать "Drop column" в Mysql 5.0.45.


синтаксис, указанный Microsoft для удаления части столбца ALTER заявление это

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

обратите внимание, что [,...n] появляется после имени столбца и в конце всего предложения drop. Это означает, что существует два способа удаления нескольких столбцов. Вы можете либо сделать это:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2, Column3

или это

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

этот второй синтаксис полезен, если вы хотите объединить падение столбца с удалением ограничение:

ALTER TBALE TableName
    DROP
        CONSTRAINT DF_TableName_Column1,
        COLUMN Column1;

при удалении столбцов SQL Sever не восстанавливает пространство, занятое удаленными столбцами. Для типов данных, которые хранятся в строках (например, int), они могут даже занимать место в новых строках, добавленных после инструкции alter. Чтобы обойти это, вам нужно создать кластеризованный индекс в таблице или перестроить кластеризованный индекс, если он уже есть. Восстановление индекса может быть выполнено с помощью команды REBUILD после изменения таблицы. Но предупреждаю: может быть медленным на очень больших столах. Например:

ALTER TABLE Test
    REBUILD;

для MySQL (ver 5.6) вы не можете сделать несколько столбцов с одним drop - оператор, но скорее несколько 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> 

кстати, drop <col_name> не хватает для drop column <col_name> как вы можете видеть из drop c3 выше.


Если это только один столбец для удаления приведенного ниже синтаксиса работает

ALTER TABLE tablename DROP COLUMN column1;

для удаления нескольких столбцов, используя DROP COLUMN не работает, ниже синтаксис работает

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


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

Generic:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

например:

ALTER TABLE Student 
DROP COLUMN Name, Number, City;

этот запрос изменит тест нескольких столбцов.

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;

для БД MySQL.

или вы можете добавить столбец при изменении в той же строке:

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

попробовать следующие запросы:

alter table table_name add field_name data_type

или

alter table table_name drop column field_name

или

alter table table_name drop field_name