Как удалить несколько столбцов с помощью одного оператора ALTER TABLE в SQL Server? - PullRequest
255 голосов
/ 14 июня 2011

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

Из Документация ALTER TABLE MSDN ...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

Указывает, что имя-ограничения или столбца-имени удаляется из таблицы.DROP COLUMN не допускается, если уровень совместимости равен 65 или выше.Могут быть перечислены несколько столбцов и ограничений.

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

Как мне написать свой SQL для отбрасывания нескольких столбцов в одном выражении (если возможно)?

Ответы [ 12 ]

372 голосов
/ 14 июня 2011

Для SQL Server:

alter table TableName
    drop column Column1, Column2

Синтаксис

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

Для MySQL:

alter table TableName
    drop Column1, drop Column2
186 голосов
/ 02 сентября 2013

Суммирование

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 COLUMN физически не удаляет данные для некоторых СУБД.Например, для MS SQL.Для типов фиксированной длины (int, numeric, float, datetime, uniqueidentifier и т. Д.) Пространство используется даже для записей, добавленных после удаления столбцов.Чтобы избавиться от потерянного пространства, сделайте ALTER TABLE ... REBUILD.

39 голосов
/ 14 июня 2011
create table test (a int, b int , c int, d int);
alter table test drop column b, d;

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

12 голосов
/ 11 марта 2013

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

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

Таким образом, для каждого столбца необходимо указать «отбрасывать столбец» в Mysql 5.0.45.

4 голосов
/ 28 января 2015

Синтаксис, указанный Microsoft для отбрасывания части столбца оператора ALTER , следующий:

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

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

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;
3 голосов
/ 11 августа 2013

Для MySQL (версия 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> 

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

2 голосов
/ 14 июня 2013

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

ALTER TABLE tablename DROP COLUMN column1;

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

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

1 голос
/ 13 августа 2015

Generic:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

Например:

ALTER TABLE Student 
DROP COLUMN Name, Number, City;
1 голос
/ 19 апреля 2013
alter table tablename drop (column1, column2, column3......);
0 голосов
/ 14 сентября 2016
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...