348

ALTER TABLE1 つのステートメントで 1 つのテーブルから複数の列を削除する 1 つの SQL コマンドを作成したいと思います。

MSDN の ALTER TABLE ドキュメントから...

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

constraint_name または column_name がテーブルから削除されることを指定します。互換性レベルが 65 以前の場合、DROP COLUMN は使用できません。複数の列と制約をリストできます。

複数の列をステートメントにリストできると言われていますが、構文にはオプションのコンマや構文を示唆するものさえ表示されていません。

1 つのステートメントで複数の列を削除するには、SQL をどのように記述すればよいですか (可能な場合)。

4

12 に答える 12

518

SQL サーバーの場合:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2;

構文は次のとおりです。

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

MySQL の場合:

ALTER TABLE TableName
    DROP COLUMN Column1,
    DROP COLUMN Column2;

またはこのように1 :

ALTER TABLE TableName
    DROP Column1,
    DROP Column2;

1この単語COLUMNオプションであり、(列の名前変更操作と表の名前RENAME COLUMN変更操作を区別するため) を除いて省略できます。RENAME詳細はこちら

于 2011-06-14T15:37:27.280 に答える
215

要約

オラクル

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;

PostgreSQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

注意してください

DROP COLUMN一部の DBMS のデータは物理的に削除されません。たとえば、MS SQL の場合。固定長型 ( intnumericfloatdatetimeuniqueidentifierなど) の場合、列が削除された後に追加されたレコードに対してもスペースが消費されます。無駄なスペースを取り除くにはALTER TABLE ... REBUILD.

于 2013-09-01T23:45:56.683 に答える
39
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.

于 2011-06-14T15:36:48.273 に答える
14

これは遅いかもしれませんが、この質問にアクセスする新しいユーザーのために共有します。複数の列を削除するには、実際の構文は

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

したがって、すべての列に対して、Mysql 5.0.45 で「ドロップ列」を指定する必要があります。

于 2013-03-11T05:55:44.027 に答える
5

ALTERステートメントの列部分を削除するために Microsoft によって指定された構文は次のとおりです。

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

[,...n] が列名の後と drop 句全体の最後にあることに注意してください。これが意味することは、複数の列を削除するには 2 つの方法があるということです。これを行うことができます:

ALTER TABLE TableName
    DROP COLUMN Column1, Column2, Column3

またはこれ

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

この 2 番目の構文は、列の削除と制約の削除を組み合わせたい場合に役立ちます。

ALTER TBALE TableName
    DROP
        CONSTRAINT DF_TableName_Column1,
        COLUMN Column1;

列を削除する場合、SQL Server は、削除された列によって占められていたスペースを再利用しません。行にインラインで格納されるデータ型 (int など) の場合、alter ステートメントの後に追加される新しい行のスペースを占有することさえあります。これを回避するには、テーブルにクラスター化インデックスを作成するか、既にクラスター化インデックスがある場合はクラスター化インデックスを再構築する必要があります。インデックスの再構築は、テーブルの変更後に REBUILD コマンドで実行できます。ただし、これは非常に大きなテーブルでは遅くなる可能性があることに注意してください。例えば:

ALTER TABLE Test
    REBUILD;
于 2015-01-28T13:14:31.463 に答える
3

dropMySQL (バージョン 5.6) の場合、単一の -statement ではなく複数のdrop-statementで複数の列の削除を行うことはできません。

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

于 2013-08-11T14:23:38.070 に答える
1
alter table tablename drop (column1, column2, column3......);
于 2013-04-19T04:51:32.097 に答える
1

ジェネリック:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

例えば:

ALTER TABLE Student 
DROP COLUMN Name, Number, City;
于 2015-08-13T13:30:04.467 に答える
0

このクエリは、複数列のテストを変更します。

create table test(a int,B int,C int);

alter table test drop(a,B);
于 2013-05-15T09:44:07.073 に答える
0
ALTER table table_name Drop column column1, Drop column column2,Drop column column3;

MySQL DB 用。

または、同じ行で変更しながらいくつかの列を追加できます。

ALTER table table_name Drop column column1, ADD column column2 AFTER column7;
于 2016-09-14T06:44:48.500 に答える