1つのALTER TABLE
ステートメントで1つのテーブルから複数の列を削除するための単一のSQLコマンドを書きたいと思います。
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Constraint_nameまたはcolumn_nameをテーブルから削除することを指定します。互換性レベルが65以前の場合、DROP COLUMNは許可されません。複数の列と制約をリストすることができます。
ステートメントに複数の列をリストすることはできますが、構文にはオプションのコンマや構文にヒントを与えるようなものさえも表示されません。
1つのステートメントで複数の列を削除するようにSQLを作成するにはどうすればよいですか(可能な場合)。
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;
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を実行してください。
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
を実行してください。
これは遅れるかもしれませんが、この質問を訪れる新しいユーザーのためにそれを共有しましょう。複数の列を削除するための実際の構文は
alter table tablename drop column col1, drop column col2 , drop column col3 ....
そのため、すべての列に対してMysql 5.0.45で "drop column"を指定する必要があります。
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;
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
からわかるように。
以下の構文を削除するのが単一列の場合
ALTER TABLE tablename DROP COLUMN column1;
DROP COLUMN
を使用しても複数の列を削除できない場合は、次の構文で動作します。
ALTER TABLE tablename DROP (column1, column2, column3......);
alter table tablename drop (column1, column2, column3......);
汎用:
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 DB用です。
あるいは、同じ行を変更しながら列を追加することもできます。
ALTER table table_name Drop column column1, ADD column column2 AFTER column7;