Как удалить несколько столбцов с помощью одной инструкции 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
подводя итоги
ALTER TABLE table_name DROP (column_name1, column_name2);
ALTER TABLE table_name DROP COLUMN column_name1, column_name2
ALTER TABLE table_name DROP column_name1, DROP column_name2;
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......);
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