web-dev-qa-db-ja.com

SQL Serverで単一のALTER TABLEステートメントで複数の列を削除する方法

1つのALTER TABLEステートメントで1つのテーブルから複数の列を削除するための単一のSQLコマンドを書きたいと思います。

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

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

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

ステートメントに複数の列をリストすることはできますが、構文にはオプションのコンマや構文にヒントを与えるようなものさえも表示されません。

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

251
Jesse Webb

SQL Serverの場合:

alter table TableName
    drop column Column1, Column2

構文は次のとおりです。

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

MySQLの場合:

alter table TableName
    drop Column1, drop Column2
368
Alex Aza

要約する

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;

PostgreSQL

ALTER TABLE table_name DROP COLUMN column_name1, DROP COLUMN column_name2;

気をつけて

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

185
dir
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を実行してください。

38
Remus Rusanu

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

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

そのため、すべての列に対してMysql 5.0.45で "drop column"を指定する必要があります。

12
MANISH ZOPE

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

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

[、... n]は、列名の後とドロップ節全体の最後の両方に表示されます。これが意味するのは、複数の列を削除する方法が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;
4
Martin Brown

MySQL(ver 5.6)では、1つの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からわかるように。

3
CSY

以下の構文を削除するのが単一列の場合

ALTER TABLE tablename DROP COLUMN column1;

DROP COLUMNを使用しても複数の列を削除できない場合は、次の構文で動作します。

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

2
kk250040
alter table tablename drop (column1, column2, column3......);
1
Neelima

汎用:

ALTER TABLE table_name 
DROP COLUMN column1,column2,column3;

例:

ALTER TABLE Student 
DROP COLUMN Name, Number, City;
1
Chirag Thakar

この問い合わせは複数列テストを変更します。

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

alter table test drop(a,B);
0
Ratan Nahak
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;
0
naveen vaishnav