[sql] SQL Server에서 단일 ALTER TABLE 문으로 여러 열을 삭제하는 방법은 무엇입니까?

하나의 ALTER TABLE명령문 에서 단일 테이블의 여러 열을 삭제하는 단일 SQL 명령을 작성하고 싶습니다 .

에서 MSDN의 ALTER 표 문서

DROP { [CONSTRAINT] constraint_name | COLUMN column_name }

constraint_name 또는 column_name이 테이블에서 제거되도록 지정합니다. 호환성 수준이 65 이하인 경우 DROP COLUMN을 사용할 수 없습니다. 여러 열과 제약 조건을 나열 할 수 있습니다.

명령문에 여러 열을 나열 할 수 있지만 구문에는 선택적 쉼표 또는 구문을 암시하는 것도 표시되지 않습니다.

한 문장에서 여러 열을 삭제하려면 SQL을 어떻게 작성해야합니까 (가능한 경우)?



답변

SQL Server의 경우 :

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테이블 이름 바꾸기 작업을 구분하기 위해) 제외하고 생략 할 수 있습니다 . 자세한 내용은 여기를 참조하십시오 .


답변

요약

오라클 :

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합니다.


답변

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]은 열 이름 뒤에 그리고 전체 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 Server는 삭제 된 열이 차지하는 공간을 회수하지 않습니다. 행에 인라인으로 저장된 데이터 형식 (예 : int)의 경우 alter 문 뒤에 추가 된 새 행에서 공간을 차지할 수도 있습니다. 이 문제를 해결하려면 테이블에서 클러스터형 인덱스를 만들거나 클러스터형 인덱스가 이미있는 경우 다시 만들어야합니다. 테이블을 수정 한 후 REBUILD 명령으로 인덱스를 다시 작성할 수 있습니다. 그러나 매우 큰 테이블에서는 이것이 느릴 수 있습니다. 예를 들면 다음과 같습니다.

ALTER TABLE Test
    REBUILD;


답변

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


답변

단일 구문 인 경우 아래 구문을 삭제하면 작동합니다.

ALTER TABLE tablename DROP COLUMN column1;

여러 열을 삭제하려면 DROP COLUMN작동하지 않습니다. 아래 구문이 작동합니다.

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